X

Limitează căutarea doar la titlurile postărilor

Fragmente de IsItWP

Căutați o modalitate de a vă limita rezultatele căutării la titlurile postărilor? Deși probabil există un plugin pentru asta, am creat o scurtă secțiune de cod pe care o puteți folosi pentru a limita căutarea doar la titlurile postărilor în WordPress.

Instrucțiuni:

Tot ce trebuie să faceți este să adăugați acest cod în fișierul functions.php al temei dvs. sau într-un plugin specific site-ului:

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

Notă: Dacă aceasta este prima dată când adăugați fragmente de cod în WordPress, consultați ghidul nostru despre cum să adăugați corect fragmente de cod în WordPress, pentru a nu vă defecta accidental site-ul.

Dacă v-a plăcut această secțiune de cod, vă rugăm să luați în considerare să consultați și celelalte articole de pe site, cum ar fi: Cele mai bune 43 de teme de fotografie pentru WordPress și Cele mai bune 11 plugin-uri de slider pentru WordPress.

Comentarii   Lasă un răspuns

  1. Johanthan Smith 6 ianuarie 2023 la 16:02

    oricum mă poți ajuta…. Nu reușesc să fac să funcționeze cu DIVI THEME

  2. Bună, mulțumesc pentru acest post. Mă întrebam dacă știi cum să adaptezi codul pentru a funcționa pentru un tip de postare personalizat, în special, pentru WP Job Manager, tipul de postare este: job_listing. Mulțumesc.

  3. cum să ignori spațiile în căutare

    de ex. iphone 7 32 gb
    și iphone 7 32gb

    doar cu un spațiu între 32 și gb returnează o diferență mare în rezultate

    cum putem ignora aceste spații în căutarea wordpress adăugând o funcție

    astfel încât să obținem aceleași rezultate din ambele tipuri de căutare

    Vă rog să mă sfătuiți
    Cu stimă

  4. Codul tău funcționează bine pe Local, nu am încercat încă live, PHP-ul meu și cunoștințele despre wordpress nu sunt grozave, am încercat să obțin
    $wpdb->postmeta.page_banner_subtitle să fie căutat, precum și post_title, fără succes, în afara domeniului meu, cineva poate ajuta sau mă poate îndruma?
    Vă mulțumesc.

  5. este pentru front-end sau funcționează și în backend?

    1. Acesta este pentru front-end.

  6. Funcționează excelent! O bucată de cod excelentă, dar cum ai limita căutarea doar la titlurile postărilor și nu la titlurile paginilor?

    1. Hei Richard, ne bucurăm că îți place. Snippet-ul este scris special pentru titlurile postărilor. Poți vedea că vizează CPT-ul Postări.

  7. Acest lucru funcționa bine pentru mine acum o lună.
    Acum primesc erori php.
    Ai o soluție actualizată?
    Este o bucată de cod grozavă pentru un site mare.

    Atenție: Parametrul 2 pentru __search_by_title_only() aștepta o referință, valoare dată în /wp-includes/class-wp-hook.php la linia 303

    1. Ai putea încerca să schimbi linia 1 cu:

      function __search_by_title_only( $search, $wp_query )

  8. De ce, chiar dacă introduc text în formularul de căutare, acel caracter limită este doar de 5 caractere?

    cum se rezolvă?

  9. Michael Moody 22 aprilie 2020 la 13:51

    Mulțumesc, dar funcționează 100% dacă folosești Chrome etc., dar nu bine (obții doar jumătate din rezultatele pe care ar trebui să le obții) dacă folosești I.E. (browserul #1 din lume), în mod bizar!

    1. Ar putea fi o problemă suplimentară a I.E., deoarece acest cod rulează pe server și nu în browser.

  10. Efekan ÇAKIR 2 august 2019 la 09:37

    Bună, caracterele turcești și caracterele non-turcești se potrivesc ca fiind aceleași. de exemplu, când caut „aşk” poate dă ask, aşk. cum pot remedia asta? vreau doar aşk când caut aşk. Mulțumesc.

  11. Este foarte util – poate fi adaptat pentru a căuta atât titlurile postărilor, cât și ale paginilor?

  12. Acesta este foarte frumos! Mulțumesc!

  13. du lich singapore 20 ianuarie 2014 la 19:51

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

    2 parametri: 500, 2. Ce înseamnă?

    1. 500 este prioritatea și 2 este numărul de parametri din funcția callback.

  14. du lich singapore 20 ianuarie 2014 la 19:46

    add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );
    2 parametri 500, 2. Ce înseamnă?

  15. Nu înțeleg prea mult PHP, trebuie să pun ceva după și înainte de acel cod?

  16. Silver City 30 iulie 2013 la 7:23

    Acest lucru este grozav… Mă întreb cum să adaug acest cod la căutarea din backend. Vreau și căutare după titlu pentru backend-ul wp.. 🙂

    Mulțumesc! 🙂

  17. Salut,
    Acest lucru a fost cu adevărat grozav.
    Mi-ai rezolvat problema cu cel mai mic efort din partea mea.
    Mulțumesc mult.

  18. disqus_JuU9dzgzNc 18 ianuarie 2013 la 14:27

    Acest lucru este grozav! Am 2 formulare de căutare pe site-ul meu. Este posibil să aplic această funcție doar unuia dintre formularele de căutare?

  19. Hei domnule!
    Ești grozav, mersi mult

  20. Web Php 03 7 mai 2012 la 1:51

    Mersi Kevin… exact codul pe care îl căutam…

    1. Kevin Chard 7 mai 2012 la 13:34

      Super, mă bucur să aud că am putut ajuta.

  21. Sunt nou (aka „sunt slab”) atât la PHP, cât și la WordPress.  Pun acest cod la întâmplare sau există un loc specific unde trebuie să meargă sau să înlocuiască un cod existent?

    Am pus acest cod în partea de jos a paginii functions.php și ecranul meu a fost alb, așa că l-am eliminat.

    1. Ok, adăugam acest cod în fișierul functions.php al WordPress și nu al temei.  Funcționează ca prin farmec.

  22. Cod grozav! Acest lucru curăță cu adevărat căutarea wordpress.  Există o modalitate de a include primele X cuvinte ale postării? Poate cu funcția substr?
    $content = get_the_content();
    $content = strip_tags($content);
    echo substr($content, 0, 50);

    1. În șablonul rezultatelor căutării, puteți trunchia cantitatea de text afișată folosind eticheta șablonului excerpt pentru un rezultat mai scurt, fără nicio modificare.

  23. Acest lucru este grozav! Ceva ce aș dori să văd este o ajustare a căutării care limitează rezultatele la titluri și etichete. Astfel, am libertatea de a-mi denumi postările cum vreau, fără să mă preocup că trebuie să includ termeni de căutare.

    1. Mă bucur să aud că îți place fragmentul! Dacă vei merge atât de departe cu etichetele etc., aș recomanda pluginul „search everything”, are multe opțiuni pe care le poți configura.

  24. nu funcționează! 🙁

    1. ce versiune de wordpress rulezi în prezent? Testez totul pentru a mă asigura că funcționează înainte de a posta un fragment. Voi reexamina acest lucru doar pentru a mă asigura.

      1. 3.2.1

        acesta este rezultatul lui $search:

        AND ( AND (((wpmtx_posts.post_title LIKE ‘%alice%’) OR
        (wpmtx_posts.post_content LIKE ‘%alice%’)) AND ((wpmtx_posts.post_title
        LIKE ‘%cooper%’) OR (wpmtx_posts.post_content LIKE ‘%cooper%’)))
        (.post_title LIKE ‘%alice%’) AND (.post_title LIKE ‘%cooper%’) OR
        (.post_title LIKE ‘%alice cooper%’))

        1. am făcut o mică actualizare, vezi dacă asta rezolvă lucrurile,

        2. Da! Acum funcționează! Mulțumesc foarte mult!!!

      2. 3.2.1

        acesta este rezultatul lui $search:

        AND ( AND (((wpmtx_posts.post_title LIKE ‘%alice%’) OR
        (wpmtx_posts.post_content LIKE ‘%alice%’)) AND ((wpmtx_posts.post_title
        LIKE ‘%cooper%’) OR (wpmtx_posts.post_content LIKE ‘%cooper%’)))
        (.post_title LIKE ‘%alice%’) AND (.post_title LIKE ‘%cooper%’) OR
        (.post_title LIKE ‘%alice cooper%’))

  25. 29 de ajustări Wordpress pentru a îmbunătăți postările și paginile 18 octombrie 2011 la 9:11

    […] [Sursă: WPSNIPP] […]

Adaugă un comentariu

Suntem bucuroși că ați ales să lăsați un comentariu. Vă rugăm să rețineți că toate comentariile sunt moderate conform politicii noastre de confidențialitate, iar toate linkurile sunt nofollow. NU folosiți cuvinte cheie în câmpul nume. Să avem o conversație personală și semnificativă.

Lista de verificare pentru lansarea WordPress

Lista de verificare finală pentru lansarea WordPress

Am compilat toate elementele esențiale de verificare pentru lansarea următorului dvs. site WordPress într-o singură carte electronică la îndemână.
Da, trimite-mi eBook-ul gratuit!