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. am avut câteva erori de sintaxă, elseif fără punct și virgulă la sfârșit, după aceea totul a funcționat bine 🙂

  2. 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.

  3. 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

  4. 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

  5. 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!

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

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

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

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

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

  10. Î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);
      ?>

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

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

    Bine făcut, domnule. Un pont grozav.

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

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

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

    Mulțumesc mult! 🙂

  16. 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?

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

    1. ce eroare obțineți?

  18. 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.

     

  19.  function custom_search_template() {

    $search_refer = $_GET["post_type"];

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

    }

  20. 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);
      ?>

  21. Vadim Goncharov March 7, 2012 at 10:18 pm

    Cum configurați ceva unde apar mesajele „nimic găsit” dacă nu există înregistrări în baza de date? 

  22. Ooh, grozav! Ce zici de câmpuri de formular bazate pe taxonomii sau câmpuri personalizate, ca pentru un câmp de căutare imobiliară? Doar citind fragmentul, pare a fi o casetă de căutare obișnuită, cu format liber, care caută tipul de postare al postării pe care o vizualizați în prezent. Ce se întâmplă dacă este o casetă de căutare pe pagina principală sau pe alt CPT? Nu pare să existe o revenire la o căutare WordPress obișnuită. Vă rog să corectați dacă greșesc.

    1. Nu, nu, prietene, pari puțin confuz
       Verifică această linie:

      Ați putea schimba în selectorul de postări personalizate:

      Afaceri
      Știri ETICHETĂ

      și așa mai departe..

      Rețineți că:
        name=”post_type” —-> $_GET[“post_type”]; —> = $search_refer.meaning căutarea nu se bazează pe tipul postării pe care o vizualizați în prezent. Se bazează pe: name=”post_type” valoare.

  23. Flávio Leonard Vargas January 30, 2012 at 4:30 am

    Funcționează grozav! Mulțumesc mult!

  24. Acest lucru funcționează (strălucit! mulțumesc Kevin) singura problemă este că există o } deplasată în secțiunea
    Afișare rezultate căutare. Aceasta ar putea fi sursa problemei lui Lin D.

    1. @toomanyairmiles:disqus  mă bucur să aud că vă place fragmentul și mulțumesc pentru avertismentul despre acel extra } Am actualizat fragmentul.

  25. Acest lucru nu a funcționat la mine

    1. Salut Lin D. Acest lucru funcționează, îl am rulând cu un număr de clienți. Dacă doriți să-mi trimiteți un e-mail cu acest formular de mai jos, vă pot ajuta mai departe prin e-mail pentru a pune lucrurile în funcțiune și chiar să arunc o privire la șabloanele dvs. dacă doriți.

      http://wpsnipp.com/contact/

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!