Completar automáticamente o sugerir automáticamente de la lista de títulos de publicaciones

12

Quiero tener una función de autocompletar o sugerir automáticamente en un formulario (búsqueda):

Cuando un usuario comienza a escribir, sugiere títulos de publicaciones que tengan texto coincidente.

También me gustaría que muestre algunos metadatos (un número) que he almacenado en relación con cada publicación personalizada. Ejemplo:

Si escribo "A", sugiero "Manzanas (13), Aardvarks (51), Astronautas (21)", etc.

    
pregunta marctain 15.07.2012 - 18:05

1 respuesta

16

Sí, esto es posible.

Puede usar jQuery Auto Suggest que se incluye con WordPress enlace

Con esto, puede escribir un formulario que realice una búsqueda de Ajax en el controlador de URL de Ajax. A la que puedes agregar acción. enlace

Por lo tanto, puede realizar una búsqueda ajax y luego, en el lado de la acción, solo puede realizar un get_posts para hacer coincidir los títulos, o una consulta de sql sin formato. Y devolver lo que se necesita.

Eso debería ayudar, si tengo tiempo dentro de poco podría escribir una solución de código completo. Pero la mayor parte es un complemento completo para ayudar a impulsar la búsqueda.

Edit: Aquí vamos, algo como esto debería hacerlo, no lo he probado, simplemente lo escribí de la cabeza. Actualización: Escape el texto introducido, restringido por tipo de publicación personalizada y solo a publicaciones publicadas

2012-11-21 Edit: tipografía actualizada en el ejemplo de código.

add_action('wp_enqueue_scripts', 'se_wp_enqueue_scripts');
function se_wp_enqueue_scripts() {
    wp_enqueue_script('suggest');
}

add_action('wp_head', 'se_wp_head');
function se_wp_head() {
?>
<script type="text/javascript">
    var se_ajax_url = '<?php echo admin_url('admin-ajax.php'); ?>';

    jQuery(document).ready(function() {
        jQuery('#se_search_element_id').suggest(se_ajax_url + '?action=se_lookup');
    });
</script>
<?php
}

add_action('wp_ajax_se_lookup', 'se_lookup');
add_action('wp_ajax_nopriv_se_lookup', 'se_lookup');

function se_lookup() {
    global $wpdb;

    $search = like_escape($_REQUEST['q']);

    $query = 'SELECT ID,post_title FROM ' . $wpdb->posts . '
        WHERE post_title LIKE \'' . $search . '%\'
        AND post_type = \'post_type_name\'
        AND post_status = \'publish\'
        ORDER BY post_title ASC';
    foreach ($wpdb->get_results($query) as $row) {
        $post_title = $row->post_title;
        $id = $row->ID;

        $meta = get_post_meta($id, 'YOUR_METANAME', TRUE);

        echo $post_title . ' (' . $meta . ')' . "\n";
    }
    die();
}
    
respondido por el Barry Carlyon 15.07.2012 - 18:39

Lea otras preguntas en las etiquetas