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.