Auto-complétion ou suggestion automatique à partir de la liste de titres d'articles

12

Je souhaite une fonction de saisie semi-automatique ou de suggestion automatique sur un formulaire (de recherche):

Lorsqu'un utilisateur commence à taper, il suggère des titres d'articles qui ont un texte correspondant.

J'aimerais également qu'il affiche certaines méta-données (un nombre) que j'ai stockées et qui sont liées à chaque publication personnalisée. Exemple:

Si je tape "A", cela signifie "Pommes (13), Aardvarks (51), Astronautes (21)", etc.

    
posée marctain 15.07.2012 - 18:05

1 réponse

16

Oui c'est possible.

Vous pouvez utiliser la fonction de suggestion automatique jQuery fournie avec WordPress enlace

.

Avec cela, vous pouvez écrire un formulaire qui effectue une recherche Ajax dans le gestionnaire d’adresses URL Ajax. Sur lequel vous pouvez add_action. enlace

Vous pouvez donc effectuer une recherche ajax puis, du côté action, vous pouvez simplement exécuter un get_posts pour faire correspondre les titres, ou une requête sql brute. Et retournez ce qui est nécessaire.

Cela devrait aider, si j’ai le temps, j’écrirai peut-être une solution de code complet. Mais le gros de celui-ci est un plugin complet pour aider à alimenter la recherche.

Edit: On y va, quelque chose comme ça devrait le faire, je ne l’ai pas testé, je l’ai tout simplement écrit. Mise à jour: échappe le texte saisi, restreint par type de message personnalisé et aux messages publiés uniquement

2012-11-21 Edit: mise à jour d'une coquille dans un exemple de code.

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();
}
    
réponse donnée Barry Carlyon 15.07.2012 - 18:39

Lire d'autres questions sur les étiquettes