X

Limita la ricerca ai soli titoli dei post

Snippet di IsItWP

Stai cercando un modo per limitare i risultati della ricerca ai titoli dei post? Sebbene esista probabilmente un plugin per questo, abbiamo creato un rapido snippet di codice che puoi utilizzare per limitare la ricerca solo ai titoli dei post in WordPress.

Istruzioni:

Tutto quello che devi fare è aggiungere questo codice al file functions.php del tuo tema o in un plugin specifico per il sito:

function __search_by_title_only( $search, &$wp_query )
{
    global $wpdb;

    if ( empty( $search ) )
        return $search; // skip processing - no search term in query

    $q = $wp_query->query_vars;    
    $n = ! empty( $q['exact'] ) ? '' : '%';

    $search =
    $searchand = '';

    foreach ( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }

    if ( ! empty( $search ) ) {
        $search = " AND ({$search}) ";
        if ( ! is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = '') ";
    }

    return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );

Nota: Se questa è la prima volta che aggiungi snippet di codice in WordPress, consulta la nostra guida su come aggiungere correttamente snippet di codice in WordPress, in modo da non compromettere accidentalmente il tuo sito.

Se ti è piaciuto questo snippet di codice, prendi in considerazione la possibilità di consultare i nostri altri articoli sul sito come: I 43 migliori temi di fotografia per WordPress e I 11 migliori plugin slider per WordPress.

Commenti   Lascia una risposta

  1. Johanthan Smith 6 gennaio 2023 alle 16:02

    comunque puoi aiutarmi... Non riesco a farlo funzionare con DIVI THEM

  2. Ciao, grazie per questo post. Mi stavo chiedendo se sapessi come adattare il codice in modo che funzioni per un tipo di post personalizzato, in particolare, per WP Job Manager, il tipo di post è: job_listing. Grazie.

  3. come ignorare gli spazi nella ricerca

    ad esempio iphone 7 32 gb
    e iphone 7 32gb

    solo con uno spazio tra 32 e gb restituisce una grande differenza nei risultati

    come possiamo ignorare questi spazi nella ricerca di wordpress aggiungendo una funzione

    in modo da ottenere gli stessi risultati da entrambi i tipi di ricerca

    Per favore, consiglia
    Saluti

  4. Il tuo codice funziona bene in locale, non l'ho ancora provato dal vivo, il mio php e la mia conoscenza di wordpress non sono un granché, ho provato a far cercare
    $wpdb->postmeta.page_banner_subtitle così come post_title, senza successo, fuori dal mio ambito, qualcuno può aiutare o indicarmi la giusta direzione.
    Grazie.

  5. questo è per il front-end o funziona anche nel back-end?

    1. Questo è per il front-end.

  6. Funziona benissimo! Ottimo pezzo di codice, ma come limiteresti la ricerca solo ai titoli dei post e non ai titoli delle pagine?

    1. Ciao Richard, siamo contenti che ti piaccia. Lo snippet è scritto specificamente per i titoli dei post. Puoi vedere che prende di mira il CPT Post.

  7. Questo funzionava bene per me un mese fa.
    Ora ottengo errori php.
    Hai per caso una soluzione aggiornata?
    È un ottimo pezzo di codice per un sito di grandi dimensioni.

    Avviso: il parametro 2 per __search_by_title_only() dovrebbe essere un riferimento, ma è stato dato un valore in /wp-includes/class-wp-hook.php alla riga 303

    1. Potresti provare a cambiare la riga 1 in:

      function __search_by_title_only( $search, $wp_query )

  8. Perché anche se inserisco del testo nel modulo di ricerca, il limite di caratteri è solo di 5 caratteri?

    come risolverlo?

  9. Grazie, ma funziona al 100% usando Chrome ecc., ma non bene (ottieni solo la metà dei risultati che dovresti) usando I.E. (il browser n. 1 al mondo), stranamente!

    1. Potrebbe essere che I.E. abbia un problema aggiuntivo, poiché questo codice viene eseguito sul server e non sul browser.

  10. Efekan ÇAKIR 2 agosto 2019 alle 09:37

    Ciao, i caratteri turchi e i caratteri non turchi vengono abbinati come uguali. ad esempio, quando cerco "aşk" potrebbe dare ask, aşk. come posso risolvere questo? voglio solo aşk quando cerco aşk. Grazie.

  11. È davvero utile: può essere adattato per cercare titoli di post e pagine?

  12. Questo è davvero bello! Grazie!

  13. du lich singapore 20 gennaio 2014 alle 19:51

    codice: add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );

    2 parametri: 500, 2. Cosa significa?

    1. 500 è la priorità e 2 è il numero di parametri nella funzione di callback.

  14. du lich singapore 20 gennaio 2014 alle 19:46

    add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );
    2 parametri 500, 2. Cosa significa ?

  15. Non capisco molto di PHP, devo mettere qualcosa prima e dopo quel codice?

  16. È fantastico… Mi chiedo come aggiungere questo codice alla ricerca del backend. Voglio anche la ricerca per titolo nel backend di WP.. 🙂

    Grazie! :)

  17. Ciao,
    È stato davvero fantastico.
    Hai appena risolto il mio problema con il minimo sforzo da parte mia.
    Grazie mille.

  18. disqus_JuU9dzgzNc 18 gennaio 2013 alle 14:27

    È fantastico! Ho 2 moduli di ricerca sul mio sito web. È possibile applicare questa funzione solo a 1 dei moduli di ricerca?

  19. Ehi Mister!
    sei un grande, grazie mille

  20. Grazie Kevin… esattamente il codice che stavo cercando…

    1. Fantastico, sono contento di sapere di aver potuto aiutare.

  21. Sono nuovo (aka “faccio schifo”) sia in PHP che in WordPress.  Devo solo inserire questo codice in modo casuale o c'è un posto specifico dove deve andare o sostituire del codice già presente?

    Ho messo questo in fondo alla pagina functions.php e il mio schermo è diventato bianco, quindi l'ho rimosso.

    1. Ok, stavo aggiungendo questo al file functions.php di WordPress e non a quello del tema.  Funziona alla grande.

  22. Ottimo codice! Questo pulisce davvero la ricerca di WordPress.  C'è un modo per includere le prime X parole del post? Magari con la funzione substr?
    $content = get_the_content();
    $content = strip_tags($content);
    echo substr($content, 0, 50);

    1. Nel tuo modello di risultati di ricerca potresti tagliare la quantità di testo visualizzato utilizzando il tag del modello excerpt per un risultato più breve senza alcun hack.

  23. Fantastico! Vorrei vedere una modifica alla ricerca che limiti i risultati a titoli e tag. In questo modo ho la libertà di intitolare i miei post come voglio senza preoccuparmi di dover includere termini di ricerca chiave. 

    1. Sono contento che ti piaccia lo snippet! Se hai intenzione di spingerti così lontano con tag, ecc., ti consiglio di dare un'occhiata al plugin "search everything", ha molte opzioni che puoi configurare.

  24. non funziona! 🙁

    1. quale versione di wordpress stai attualmente utilizzando? Testo tutto per assicurarmi che funzioni prima di pubblicare uno snippet. Darò un'altra occhiata a questo solo per essere sicuro.

      1. 3.2.1

        questo è l'output di $search:

        E ( E (((wpmtx_posts.post_title LIKE ‘%alice%’) O
        (wpmtx_posts.post_content LIKE ‘%alice%’)) E ((wpmtx_posts.post_title
        LIKE ‘%cooper%’) O (wpmtx_posts.post_content LIKE ‘%cooper%’)))
        (.post_title LIKE ‘%alice%’) E (.post_title LIKE ‘%cooper%’) O
        (.post_title LIKE ‘%alice cooper%’))

        1. ho fatto un piccolo aggiornamento, vedi se questo risolve le cose,

        2. Sì! Ora funziona! Grazie mille!!!

      2. 3.2.1

        questo è l'output di $search:

        E ( E (((wpmtx_posts.post_title LIKE ‘%alice%’) O
        (wpmtx_posts.post_content LIKE ‘%alice%’)) E ((wpmtx_posts.post_title
        LIKE ‘%cooper%’) O (wpmtx_posts.post_content LIKE ‘%cooper%’)))
        (.post_title LIKE ‘%alice%’) E (.post_title LIKE ‘%cooper%’) O
        (.post_title LIKE ‘%alice cooper%’))

  25. 29 Tweaks di WordPress per Migliorare Post e Pagine 18 ottobre 2011 alle 9:11

    [...] [Fonte: WPSNIPP] [...]

Aggiungi un commento

Siamo lieti che tu abbia scelto di lasciare un commento. Tieni presente che tutti i commenti sono moderati secondo la nostra normativa sulla privacy e tutti i link sono nofollow. NON utilizzare parole chiave nel campo del nome. Avviamo una conversazione personale e significativa.

Checklist per il lancio di WordPress

La Guida Definitiva per il Lancio di WordPress

Abbiamo raccolto tutti gli elementi essenziali della checklist per il lancio del tuo prossimo sito web WordPress in un comodo ebook.
Sì, Inviami l'eBook Gratuito!