X

Creați mai multe șabloane de căutare pentru tipuri de postări personalizate

Fragmente de IsItWP

Căutați o modalitate de a crea mai multe șabloane de căutare pentru tipuri de postări personalizate? Deși probabil există un plugin pentru asta, am creat un fragment de cod rapid pe care îl puteți folosi pentru a crea mai multe șabloane de căutare pentru tipuri de postări personalizate în WordPress.

Instrucțiuni:

Șablon de căutare

Creați un fișier nou numit search.php și adăugați următorul șablon de căutare. Schimbați $search_refer= CUSTOM_POST_TYPE cu numele tipurilor dvs. de postări. De asemenea, va trebui să schimbați calea șablonului către șablonul corespunzător pe care doriți să afișați rezultatele.

<?
/* Template Name: Search Results */

$search_refer = $_GET["post_type"];
if ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_one-name.php'); }
elseif ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_two-name.php'); };

?>

Afișați rezultatele căutării

Adăugați acest query_post chiar deasupra buclei în șabloanele de căutare pe care le creați. Nu uitați să schimbați CUSTOM_POST_TYPE pentru fiecare dintre șabloanele dvs.

<?php 
	$args = array(
		'post_type'=> 'CUSTOM_POST_TYPE',
                's'    => $s,
                'paged' => $paged,
                );
		query_posts($args);
?>

Formular de căutare

Adăugați acest HTML în șablonul pe care doriți să afișați formularul de căutare. Va trebui să schimbați numele CUSTOM_POST_TYPE cu tipul de postare pe care doriți să îl căutați. Va trebui să creați un formular nou pentru fiecare tip de postare personalizată sau să utilizați un meniu de selecție pentru a seta post_type.

<form id="searchform" action="<?php bloginfo('home'); ?>/" method="get">
	<input id="s" maxlength="150" name="s" size="20" type="text" value="" class="txt" />
	<input name="post_type" type="hidden" value="CUSTOM_POST_TYPE" />
	<input id="searchsubmit" class="btn" type="submit" value="Search" />
</form>

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 acest fragment de cod, vă rugăm să luați în considerare să consultați celelalte articole ale noastre de pe site, cum ar fi: cele mai bune 43 de teme de fotografie pentru WordPress și cum să creați un formular de contact în WordPress.

Comentarii   Lasă un răspuns

  1. Sally Pilkington January 7, 2019 at 3:09 pm

    Salut, Mulțumesc pentru acest tutorial.
    Încerc să creez un formular de căutare personalizat pe care să-l plasez în bara laterală a secțiunii de blog a site-ului meu. Vreau ca formularul de căutare să caute doar în POSTĂRI (postări standard de blog, nu un tip de postare personalizat) – și să ignore orice alt conținut, de ex. pagini. Este posibil să adaptez această metodă pentru a se potrivi cu ceea ce încerc să fac?
    Am încercat, dar fără succes.
    Mulțumesc mult

    1. Salut Sally,
      Încearcă acest tutorial despre cum să filtrezi tipurile de postări din rezultatele căutării. Sper să-ți fie de ajutor 🙂

  2. Miau miau miau-nific )

  3. Pitico Medtler July 3, 2015 at 2:16 pm

    Perfect. Mulțumesc!

  4. Scuze pentru întrebarea de începător, dar există o modalitate de a merge un nivel mai departe și de a căuta doar într-un meta_field personalizat în cadrul tipului de postare personalizat? Am căutat zile în șir și acesta este cel mai apropiat script pe care l-am putut găsi. În prezent, caută titlurile și conținutul postării, dar am o mulțime de câmpuri personalizate pentru CPT și vreau doar ca utilizatorul să caute un câmp specific. Păreri?

  5. este posibil să adaptezi aceste instrucțiuni pentru a căuta o taxonomie personalizată în loc de o postare personalizată? Încerc să obțin o căutare separată pentru fiecare taxonomie personalizată și nu prea reușesc să înțeleg. Mulțumesc!

  6. am avut câteva erori de sintaxă, elseif fără punct și virgulă la sfârșit, după aceea totul a funcționat bine 🙂

  7. dacă valoarea căutată este goală, exemplu: ?s=&post_type=products returnează întotdeauna rezultate în șablonul implicit, indiferent de post_type pe care îl am în șirul de căutare? există o soluție pentru asta?

    De exemplu: ?s=+&post_type=products VA FUNCȚIONA, deschide în search-products.php
    acest lucru: ?s=&post_type=products NU VA FUNCȚIONA, deschide în search-post.php

    1. Cred că cea mai bună soluție ar fi să folosiți javascript pentru a solicita ceva în câmp înainte ca aceștia să poată căuta.

    2. Cred că cea mai bună soluție ar fi să folosiți javascript pentru a solicita ceva în câmp înainte ca aceștia să poată căuta.

    3. Cred că cea mai bună soluție ar fi să folosiți javascript pentru a solicita ceva în câmp înainte ca aceștia să poată căuta.

  8. dacă valoarea căutată este goală, exemplu: ?s=&post_type=products returnează întotdeauna rezultate în șablonul implicit, indiferent de post_type pe care îl am în șirul de căutare? există o soluție pentru asta?

    De exemplu: ?s=+&post_type=products VA FUNCȚIONA, deschide în search-products.php
    acest lucru: ?s=&post_type=products NU VA FUNCȚIONA, deschide în search-post.php

  9. dacă valoarea căutată este goală, exemplu: ?s=&post_type=products returnează întotdeauna rezultate în șablonul implicit, indiferent de post_type pe care îl am în șirul de căutare? există o soluție pentru asta?

    De exemplu: ?s=+&post_type=products VA FUNCȚIONA, deschide în search-products.php
    acest lucru: ?s=&post_type=products NU VA FUNCȚIONA, deschide în search-post.php

  10. Articol salvator de vieți, mulțumesc, mă chinuiam să găsesc o soluție bună, aceasta a ajutat mult

    1. Nicio problemă, mă bucur că am putut ajuta!

  11. Briliant. Mulțumesc. Ești grozav!

    1. Nicio problemă, mă bucur că îți place fragmentul!

  12. Briliant. Mulțumesc. Ești grozav!

  13. Foloseam un child-theme. A trebuit să folosesc { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }

  14. Mulțumesc pentru pont! Funcționează perfect…

  15. Îmi place ideea din spatele acestui lucru, atât de inteligent.
    Am o problemă cu paginarea, totuși. Deci, o face oarecum inutilă, cu excepția cazului în care afișez toate rezultatele cu un „showposts”=>999,

    1. OH SNAP… deci lucram la asta de o oră sau cam așa ceva înainte să renunț și să comentez… și apoi mi-am dat seama…
      Am schimbat argumentul query_posts la acesta

      „bio”,
      „posts_per_page” => 10,
      „paged” => $paged,
      );
      query_posts($args);
      ?>

  16. Asta îmi returnează o pagină goală.. Vreun ajutor?

  17. Silver-monkey June 24, 2013 at 2:06 pm

    Bine făcut, domnule. Un pont grozav.

  18. Mulțumesc mult! Mi-ai făcut dimineața.

  19. Este doar pentru tipuri de postări personalizate?

  20. Codul funcționează bine în 3.4.2, dar a trebuit să schimb „post_type” în „posttype”.

    Mulțumesc mult! 🙂

  21. Nu funcționează pentru mine în 3.3.1. Variabila $s posibil nu primește nicio valoare. Sugestii?

    1. Voi testa lucrurile într-o versiune recentă de WordPress doar pentru a fi sigur, deși nu ar trebui să aveți probleme. Aș sugera, de asemenea, să actualizați la 3.4. Voi reveni aici cu rezultatele.

    2. Am testat lucrurile și pare să funcționeze bine, ați creat fișierele de șablon personalizate și aveți totul configurat corect?

  22. Obțin o eroare de server încercând să implementez asta 🙁

    1. ce eroare obțineți?

  23. bine, asta am făcut pentru o soluție de rezervă:

    1. am creat un folder în fișierele mele de șablon numit „search”. –> TEMPLATEPATH .’/search/’

    2. apoi am creat șabloane de postări personalizate folosind codul implicit search.php din Wordpress.
    De ex. : search-xxxxx.php unde xxxxx este tipul de postare personalizat.

    3. plasați toate șabloanele de postări personalizate search-xxxxx.php în folderul search nou creat.

    4. redenumiți fișierul search.php implicit al WordPress în –> default-search.php

    5. creați un nou fișier search.php și puneți următorul cod:

     

    6. practic apelăm o funcție numită custom_search_template().

    7. să definim acea funcție în fișierul fuctions.php :

    function custom_search_template() {

    $search_refer = $_GET["post_type"];

    if ( isset($_GET["post_type"])) { if (file_exists(TEMPLATEPATH . '/search/search-' .$search_refer. '.php')) load_template(TEMPLATEPATH . '/search/search-' .$search_refer. '.php'); else { load_template(TEMPLATEPATH . '/search-default.php'); } } else { load_template(TEMPLATEPATH . '/search-default.php'); }

    8. În final, formularul de căutare:

           

          
     

                Selectați Tip Postare

               
                    Afaceri
                    Știri
                    ETICHETĂ
                    
                  

    9. Practic, când folosești acest formular pentru a trimite o interogare de căutare,
       Wordpress preia name=”post_type” –> adică:   $_GET[“post_type”];

    Funcția verifică apoi dacă $_GET[“post_type”] a fost setat,
     dacă da, încarcă un fișier șablon bazat pe $search_refer = $_GET[“post_type”]
    din folderul /search/ pe care l-am creat.  adică. search-xxxxx.php  —>  search-$search_refer.php

    dacă nu există un șablon numit „search-$search_refer.php”, atunci funcția folosește default-search.php pentru a afișa rezultatele căutării.

    10. Vă rog să comentați dacă greșesc.

     

  24.  function custom_search_template() {

    $search_refer = $_GET["post_type"];

    load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);

    }

  25. Am o problemă cu paginarea, când rezultatul căutării pentru tipul de postare personalizat este mai mare de 5.

    Aveți sfaturi?

    1. Am încercat asta pe array-ul arg

      „bio”,
      „posts_per_page” => 10,
      „paged” => $paged,
      );
      query_posts($args);
      ?>

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!