Tutoriale WordPress de încredere, atunci când aveți cea mai mare nevoie.
Ghidul începătorului pentru WordPress
Cupa WPB
25 de milioane+
Site-uri web care folosesc plugin-urile noastre
16+
Ani de experiență WordPress
3000+
Tutoriale WordPress de la experți

Cum să limitați rezultatele căutării pentru anumite tipuri de postări în WordPress

Te-ai întrebat vreodată cum poți limita rezultatele căutării la anumite tipuri de postări? Nu este foarte greu. Deja ți-am arătat cum să dezactivezi funcția de căutare în WordPress modificând fișierul functions.php. Acum vom face același lucru, cu excepția faptului că vom filtra rezultatele căutării.

Deschideți fișierul functions.php și adăugați următorul cod:

function searchfilter($query) {

    if ($query->is_search && !is_admin() ) {
        $query->set('post_type',array('post','page'));
    }

return $query;
}

add_filter('pre_get_posts','searchfilter');

Observați linia care spune

$query->set('post_type',array('post','page'));

Puteți filtra rezultatele căutării modificând valorile din variabila array. În prezent, este setat să afișeze postări și pagini, dar îl puteți modifica pentru a afișa orice doriți.

Dezvăluire: Conținutul nostru este susținut de cititori. Acest lucru înseamnă că dacă faceți clic pe unele dintre linkurile noastre, putem câștiga un comision. Vedeți cum este finanțat WPBeginner, de ce contează și cum ne puteți susține. Iată procesul nostru editorial.

Cel mai bun instrumentar WordPress

Obține acces GRATUIT la instrumentarul nostru - o colecție de produse și resurse legate de WordPress pe care fiecare profesionist ar trebui să le aibă!

Interacțiuni cu cititorii

26 ComentariiLasă un răspuns

  1. Mulțumesc pentru acest cod – a funcționat, deși ultima actualizare a fost în 2013! Tema mea folosește și o căutare instantanee și aș dori să limitez și acolo rezultatele. Cum aș putea face asta?

  2. Tema mea actuală afișează articole cu câteva rânduri de început pentru termenul/cuvântul căutat. Vreau să o personalizez pentru a afișa paragraful care conține termenul/cuvântul căutat în rezumatul articolului. Cu alte cuvinte, vreau să afișez textul relevant în rezumatul articolului, nu paragraful de început în rezultatele căutării. Poate cineva să mă ajute cu asta....

  3. Salut,

    Cum pot limita rezultatele căutării pentru anumite tipuri de postări ȘI termeni specifici de taxonomie personalizată?

  4. Am o funcție ușoară în fișierul themes functions.php, care ar trebui să filtreze doar Postările după un termen de căutare... când caut ceva acum, apare eroarea HTTP 500 „Site-ul nu poate afișa pagina”. Cineva are o idee, ce este greșit cu funcția mea?

    function searchFilter($query) { if ($query->is_search) { wp_reset_query(); $args = array ( ‘s’ => $_GET[‘s’] ); query_posts( $args ); } } add_filter(‘pre_get_posts’, ‘searchFilter’);

  5. Acest lucru restricționează toate formularele de căutare la tipul de postare personalizat – inclusiv formularul de căutare din bara laterală, care trebuie să returneze toate rezultatele. Acest lucru funcționează pentru mine:

    funcție searchfilter($query) {
    if ($query->is_search && !is_admin() ) {
    if(isset($_GET[‘post_type’])) {
    $type = $_GET[‘post_type’];
    if($type == ‘book’) {
    $query->set(‘post_type’,array(‘book’));
    }
    }
    }
    return $query;
    }
    add_filter(‘pre_get_posts’,’searchfilter’);

    • Mulțumesc pentru ajutor, am îmbunătățit codul dvs. astfel încât oamenii să poată căuta doar post_types permise.

      funcție searchfilter($query)
      {
      if ($query->is_search && !is_admin() )
      {
      if(isset($_GET[‘post_type’])) {
      $types = (array) $_GET[‘post_type’];
      $allowed_types = get_post_types(array(‘public’ => true, ‘exclude_from_search’ => false));
      foreach($types as $type)
      {
      if( in_array( $type, $allowed_types ) ) { $filter_type[] = $type; }
      }
      if(count($filter_type))
      {
      $query->set(‘post_type’,$filter_type);
      }
      }
      }
      }
      add_filter(‘pre_get_posts’,’searchfilter’);

      • Cum este implementat acest lucru? Dacă am înțeles corect comentariul lui Greg, dorim un singur formular care este limitat la un tip de postare, păstrând în același timp căutarea implicită intactă pentru alte zone ale site-ului.

        Întreb deoarece un site la care lucrez are nevoie de o „Bibliotecă de resurse” căutabilă, pe care aș dori să o construiesc fără a compromite funcționalitatea normală de căutare.

  6. Salut,

    Nu pot restricționa paginile în filtrul de căutare.
    Am nevoie doar de căutare în postări, nu în pagini.

    $query->set(‘post_type’,array(‘post’));
    Aceasta afișează și paginile.

  7. Am folosit acest cod pentru a-mi restricționa rezultatele căutării la Pagini, nu la Articole. A funcționat în acest sens, însă pare să caute doar numele paginilor, spre deosebire de conținut. De exemplu, dacă un utilizator caută „prețuri”, pagina Prețuri va fi un rezultat, dar dacă caută „preț” sau „cost” (ambele fiind cuvinte de pe pagina de prețuri), nu se găsește nimic. Lipsește un fragment de cod?

  8. Salut,
    Am o întrebare și nu am reușit să găsesc o soluție de luna trecută.
    Am pierdut multe categorii, pagini și redirecționări pe blogul meu, așa că bara mea de căutare găsește multe rezultate inutile atunci când încerci să cauți ceva. Vreau să-mi personalizez search.php doar pentru partea de categorii. Cu alte cuvinte, când cauți ceva, rezultatele ar trebui să fie doar din secțiunile de categorii. Astfel, voi scăpa de rezultatele redundante și duplicate. Codurile mele actuale sunt mai jos... Vă rog să mă ajutați :)

  9. Există o problemă cu fragmentul dvs.:

    Limitează rezultatele căutării în backend, ar trebui să o încadrați cu:


    dacă ( !is_admin() ) {
    // fragment
    }

  10. Deci, cum ați aplica acest lucru unei bare de căutare specifice? Nu se aplică filtrul la fiecare bară de căutare de pe site-ul dvs., nu-i așa?

Lasă un răspuns

Mulțumim că ai ales să lași un comentariu. Te rugăm să reții că toate comentariile sunt moderate conform politicii noastre de comentarii, iar adresa ta de e-mail NU va fi publicată. Te rugăm să NU folosești cuvinte cheie în câmpul nume. Să avem o conversație personală și semnificativă.