Completamento automatico o suggerimento automatico dall'elenco dei titoli dei post


13

Voglio avere una funzione di completamento automatico o di suggerimento automatico in un modulo (ricerca):

Quando un utente inizia a digitare, suggerisce i titoli dei post con testo corrispondente.

Mi piacerebbe anche che mostrasse alcuni metadati (un numero) che ho archiviato in relazione a ciascun post personalizzato. Esempio:

Se scrivo "A", mi suggerisce "Mele (13), Aardvarks (51), Astronauti (21)", ecc.


Qual è il nome del meta campo? Aggiungi il codice che mostra esattamente come hai aggiunto il meta campo. Grazie.
— Kaiser,

Ho ipotizzato che il meta field sia un post field specificamente aggiunto (tramite aggiunta di meta box) o un post var personalizzato, a cui è possibile accedere con get_post_meta (iirc)
— Barry Carlyon,

In realtà non ho ancora aggiunto il meta campo.
— marctain,

Risposte:


17

Sì questo è possibile.

È possibile utilizzare jQuery Auto Suggest incluso in WordPress http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Con questo è possibile scrivere un modulo che esegue una ricerca Ajax nel gestore URL Ajax. Su cui puoi aggiungere_action. http://codex.wordpress.org/AJAX_in_Plugins

Quindi puoi cercare Ajax e poi sul lato azione puoi semplicemente eseguire get_posts per abbinare i titoli o una query sql non elaborata. E restituisci ciò che è necessario.

Ciò dovrebbe aiutare, se avrò tempo a breve potrei scrivere una soluzione di codice completo. Ma la maggior parte di esso è un intero plugin per aiutare a potenziare la ricerca.

Modifica: Eccoci, qualcosa del genere dovrebbe farlo, non l'ho testato, l'ho appena scritto sulla cima della mia testa. Aggiornamento: Esci dal testo inserito, restringilo per tipo di post personalizzato e solo per i post pubblicati

21/11/2012 Modifica: errore di battitura aggiornato nell'esempio di codice.

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();
}

Caspita, grazie Barry! Ci darò un vortice, questo va in Functions.php, sì? Modificherò le parti necessarie e vedrò cosa offre
— marctain,

2
In teoria sì, in Functions.php. Lo metterei in un plugin, quindi è fuori mano. Se entra direttamente in Functions.php, allora si può fare qualche ottimizzazione, quindi parte di questo codice può essere applicato a funzioni che già esistono in Functions.php (dipende ovviamente dal tema)
— Barry Carlyon,

Funziona .. quasi! Avrei dovuto specificare che volevo che fosse un post-tipo personalizzato, modificherò la mia domanda
— marctain

Aggiornato per includere like_escape. Non sto usando una% all'inizio, perché vuole cercare dove iniziano i titoli dei post con la prima lettera inserita. Non una partita globale. Il mio codice di lavoro è con $ _REQUEST ['q'] senza opzioni applicate a jQuery suggest. Q emula ciò che usano i motori di ricerca.
— Barry Carlyon,

@BarryCarlyon Per favore, non modificare ogni cosa minore. Se raggiungi 10 modifiche, questo verrà automaticamente trasformato in un "wiki della community" e perderai tutti i punti rep. E abbiamo bisogno di più utenti, che aggiungano buone risposte e ottengano un numero min. di reputazione per svolgere attività come la modifica, l'aggiunta di wiki, ecc. Oh, ed exit;è sempre più veloce di die();:)
— Kaiser
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.