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.
am avut câteva erori de sintaxă, elseif fără punct și virgulă la sfârșit, după aceea totul a funcționat bine 🙂
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
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.
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.
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.
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
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
Articol salvator de vieți, mulțumesc, mă chinuiam să găsesc o soluție bună, aceasta a ajutat mult
Nicio problemă, mă bucur că am putut ajuta!
Briliant. Mulțumesc. Ești grozav!
Nicio problemă, mă bucur că îți place fragmentul!
Briliant. Mulțumesc. Ești grozav!
Foloseam un child-theme. A trebuit să folosesc { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }
Mulțumesc pentru pont! Funcționează perfect…
Î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,
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);
?>
Asta îmi returnează o pagină goală.. Vreun ajutor?
Bine făcut, domnule. Un pont grozav.
Mulțumesc mult! Mi-ai făcut dimineața.
Este doar pentru tipuri de postări personalizate?
Codul funcționează bine în 3.4.2, dar a trebuit să schimb „post_type” în „posttype”.
Mulțumesc mult! 🙂
Nu funcționează pentru mine în 3.3.1. Variabila $s posibil nu primește nicio valoare. Sugestii?
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.
Am testat lucrurile și pare să funcționeze bine, ați creat fișierele de șablon personalizate și aveți totul configurat corect?
Obțin o eroare de server încercând să implementez asta 🙁
ce eroare obțineți?
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.
function custom_search_template() {
$search_refer = $_GET["post_type"];
load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);
}
Am o problemă cu paginarea, când rezultatul căutării pentru tipul de postare personalizat este mai mare de 5.
Aveți sfaturi?
Am încercat asta pe array-ul arg
„bio”,
„posts_per_page” => 10,
„paged” => $paged,
);
query_posts($args);
?>
Cum configurați ceva unde apar mesajele „nimic găsit” dacă nu există înregistrări în baza de date?
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.
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.
Funcționează grozav! Mulțumesc mult!
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.
@toomanyairmiles:disqus mă bucur să aud că vă place fragmentul și mulțumesc pentru avertismentul despre acel extra } Am actualizat fragmentul.
Acest lucru nu a funcționat la mine
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/