Kuidas luua WordPressis kohandatud täpsema otsingu malli
See juhend on mõeldud teile, kellel on kohandatud postituse tüüp (CPT) ja soovite täpsema otsingu lehte, mis otsib selle CPT raames tulemusi. Otsinguvormis saate erinevate väljade piires otsimiseks seadistada erinevaid sisendeid; postituse pealkiri, postituse sisu, mis tahes tüüpi kohandatud meta või kohandatud taksonoomia.
Selles postituses eeldame, et meil on raamatute jaoks kohandatud postituse tüüp, lisatud kohandatud taksonoomia raamatužanrile ja hulk kohandatud meta; autor, avaldamisaasta, ISBN-number ja märkeruut, kas raamat on laos või mitte. Kohandatud postituse tüüp ja parameetrid sõltuvad täielikult teie vajadustest, allolev kood püüab lihtsalt katta enamiku alustest.
Mida me teeme
Loome raamatute jaoks kohandatud postituse tüübi ja žanri jaoks sellele lisatud kohandatud hierarhilise taksonoomia. Lisaks on igal raamatul kohandatud väljad autori(te), avaldamisaasta, ISBN-numbri ja märkeruut selle kohta, kas lisada raamatuid, mis on otsas. Mis puutub otsingulehe endasse, siis teeme lehemalli, kus asub suurem osa meie koodist. Leht algab alguses kohandatud vormi renderdamisega; näitab kõiki võimalikke parameetreid tulemuste filtreerimiseks. Selle all kuvatakse loendis kõik raamatute tulemused. Otsustame tulemuste arvu lehekülje kohta ja lisame lehekülgede alla, kui arv ületab seda.
Need on võimalikud filtriparameetrid, mille me oma täpsema otsingu malli jaoks loome:
- Tekstisisend mis tahes stringi otsimiseks postituse pealkirjas ja postituse sisus.
- Rippmenüü žanri valimiseks. Võimaldab valida termini või jätta selle valikule "Igasugune".
- Sisend autori nime sisestamiseks, mis otsib kohandatud metast. Lõdvalt sobitamine, mis tähendab "Mark" sisestamist, tagastab kõik autorid, kelle nimi on või sisaldab "Mark".
- Numbrisisend raamatu avaldamisaasta sisestamiseks, mis otsib kohandatud metast. Lõdvalt sobitamine, mis tähendab, et näiteks “20" sisestamine sobib iga 1920. aastal või 20-ga algava aasta raamatuga.
- Sisend ISBN-i (rahvusvahelise raamatu ID) sisestamiseks, mis otsib kohandatud meta. Tagastab ainult täpsed vasted.
- Märkeruut, kas lisada laost otsa saanud raamatud, veel üks kohandatud meta. Vaikimisi on see märkimata, mis tähendab, et tulemused näitavad ainult laos olevaid raamatuid.
Vorm on seadistatud kasutama GET-meetodit, mis tähendab, et kõik otsitavad parameetrid lisatakse URL-is olevale lehele kujul " ?book-search=world&year-published=2016&book-author=mark
". Teine võimalus, kui soovite vältida "inetute URL-ide" kasutamist, on Javascripti ja AJAX-i kasutamine. Kuid sellel on mõned varjuküljed. Esiteks ei saa konkreetsete otsinguparameetritega otsingut järjehoidjatesse lisada "eeltäidetud". Kujutage ette, et soovite mujal oma saidil linkida otse konkreetse autori kohandatud otsingulehele. Seejärel saate suunata lingi oma otsingulehele, lisada " ?author=mark
" ja lingil klõpsamine viib otse selle autori tulemusteni. Seda pole AJAXiga võimalik saavutada.
Otsinguparameetrid hõlmavad üksteist. See tähendab, et näiteks aasta “2011” ja autori “Some guy” kombineerimisel tagastatakse ainult need raamatud, mis vastavad MÕLEMALE. Kui määrame üldotsingu tekstisisestuses ka sõna „naljakas”, saame ainult vastused, mis vastavad kõigile kolmele. Öeldud erinevate sõnadega; kasutame JA loogikat. See on kõige levinum meetod otsingutulemuste filtreerimiseks.
See õpetus ei hõlma stiilimist, nii et see osa on teie otsustada. Allpool on näide sellest, kuidas see mõne põhilise stiiliga välja näeb.
Märkus kohandatud päringuga lehitsemise kohta
Kui soovite kohandatud päringu lehekülgede järjekorda seada ühel lehel, peate teadma mõnda asja. Päringu lehekülgede arvu saab luua WordPressi funktsioonide [the_posts_pagination](https://developer.wordpress.org/reference/functions/the_posts_pagination/)()
, [paginate_links](https://developer.wordpress.org/reference/functions/paginate_links/)()
või kahe [next_post_link](https://developer.wordpress.org/reference/functions/next_post_link/)()
ja [previous_post_link](https://developer.wordpress.org/reference/functions/previous_post_link/)()
. Need on aga kodeeritud töötama globaalse wp_query
objektiga (mis lehemalli puhul on leht ise), mitte kohandatud päringuga.
On mõned lahendused, näiteks lehekülgede muutmise funktsiooni kirjutamine ise. Või võite toimingut kasutada ja objektiga pre_get_posts
manipuleerida. wp_query
Kahjuks on see meetod lehekülgede funktsiooni mõjutamiseks liiga hilja. Teine võimalus on jätta lehekülgede vahelejätmine täielikult vahele ja näidata lihtsalt kõiki postitusi. See võib olla valik, kui teil pole palju postitusi, kuid kui loote täpsema kohandatud otsingu malli, siis eeldan, et teil on üsna vähe postitusi.
See, mida me selles juhendis teeme, on omamoodi "häkkiv" meetod. Lehemallis alistame wp_query
objekti oma kohandatud päringuga, nii et tsükli- ja lehekülgede funktsioonid toimiksid ootuspäraselt. See meetod on minu jaoks kõige edukam olnud.
Ilma pikema jututa alustame kodeerimisega!
Kohandatud postituse tüübi, taksonoomia ja metaväljade seadistamine
Esimene samm on kohandatud postituse tüübi määratlemine, mille jaoks tahame täpsema otsingu malli luua. Kui olete juba kohandatud postituse tüübi seadistanud või soovite seda postituste või lehtede jaoks rakendada, võite liikuda otse järgmise osa juurde.
Määratleme kohandatud postituse tüübi book
koos hierarhilise kohandatud taksonoomiaga book_category
. Ma ei hakka siin üksikasjalikult selgitama, kuidas kohandatud postitustüüpe ja taksonoomiaid luua. Kui soovite rohkem teada saada, on mul postitus, mis seda üksikasjalikult kirjeldab.
Sisestage see kood ükskõik kuhu oma teema functions.php
või pistikprogrammi koodis:
Selle tulemuseks on kohandatud postituse tüüp, millele administraatoris on lisatud taksonoomia.
Kohandatud postituse meta seadistamine on natuke teie enda otsustada – kas käsitsege seda käsitsi [add_meta_box](https://developer.wordpress.org/reference/functions/add_meta_box/)()
või kasutage pluginat Advanced Custom Fields (ACF), mis sobib selliseks tööks suurepäraselt. Kasutan ACF-i väljade programmiliseks seadistamiseks, näiteks:
Loomulikult olete teretulnud seadistama ACF-i välju, kasutades ACF-i administraatori GUI-d. Kuid nende koodi järgi lisamisel on mitmeid eeliseid. Näiteks tagades, et säilitate samad väljad kõikjal, kus oma teema või pistikprogrammi aktiveerite. Kui määrate väljad administraatoris, peate WordPressi saidi vahetamisel meeles pidama, et eksportida ja importida need väljad.
Pange tähele metanimesid; nt book_author
, year_published
ja nii edasi. Te viitate neile, kui loome täpsema otsingu mallile kohandatud päringu.
ACF-i pistikprogrammi ja ülaltoodud koodiga näeks ühe raamatu redigeerimine välja järgmine:
Sellega on meil kõigil hea luua nii palju raamatupostitusi, kui tahame. Järgmine samm on meie otsingu jaoks lehemalli loomine.
Lehe malli loomine
Loome lehemalli, kuhu lisame oma täpsema otsingu malli. Tehke oma teemast koopia single.php
või page.php
ja nimetage see ümber näiteks template-booksearch.php
. HTML on teie otsustada, kuid põhjus, miks me üksikust või leheküljest koopia teeme, on see, et need on paigutuse poolest tõenäoliselt kõige lähedasemad mallid.
Lehemalli ülaosas anname märku, et tegemist on lehemalliga, kirjutades kommentaariplokki "Malli nimi" ja selle nime. See tagab, et saame lehe muutmisel valida lehe malli.
Jaotised, mida peame oma mallis kodeerima, on järgmised, järgmises järjekorras:
- Salvestage kõik vormi poolt varem esitatud muutujad, kasutades
get_query_var()
. Samuti tuleb salvestada praegune leht - Otsingu tegemiseks renderdage otsinguvorm esitamisnupuga
- Lähtestage
wp_query
objekt - Seadistage uue argumendid
WP_Query()
sõltuvalt otsitud parameetritest ja käivitage päring.wp_query
Määrake objektile kohandatud päring - Sirvige tulemusi ja kuvage need. Samuti renderdage lehekülgede lingid
- Lähtestage
wp_query
objekt sellele, mis see oli
Põhjus, miks me peame kõik otsitud muutujad ja praeguse lehe varakult salvestama, on see, et need muutujad lähevad kaduma, kui lähtestame wp_query
objekti sammus 3. Samuti vajame muutujaid otsinguvormi jaoks, et väljad täita.
Otsustage oma mallis koht, kuhu soovite kohandatud otsingu väljastada, ja alustame ülaosast.
1 Hangi kõik otsitud muutujad
Me saame GET-i parameetrid (URL-ist) kätte [get_query_var](https://developer.wordpress.org/reference/functions/get_query_var/)()
. Näiteks; kui meil on ?book-author=benjamin
URL-is parameeter, get_query_var('book-author')
tagastaks kasutamine stringi " benjamin
". Kõikide muutujate toomist saab teha järgmiselt:
$search_string = get_query_var('book-search');
$author = get_query_var('book-author');
$category = get_query_var('book-category');
$year = get_query_var('year-published');
$isbn = get_query_var('isbn');
$out_of_stock = get_query_var('out-of-stock');
Kuid need on kõik kohandatud parameetrid, mis ei kuulu WordPressi standardsete GET-parameetrite hulka. WordPress ignoreerib kõiki GET-i parameetreid, mida ta ei tea, nii et nende kutsumine tagastab alati tühja stringi. Peame ütlema WordPressile, et ta lubaks kõik need GET-parameetrid. Teeme seda filtreerides query_vars
. functions.php
Lisage oma sisse ka see:
add_filter('query_vars', function($vars) {
$vars[] = 'book-search';
$vars[] = 'book-author';
$vars[] = 'book-category';
$vars[] = 'year-published';
$vars[] = 'isbn';
$vars[] = 'out-of-stock';
return $vars;
});
Nüüd get_query_var()
peaksid meie omad saama GET-i parameetrid hankida. Kui neid ei määrata, tagastab see tühja stringi.
wp_query
Enne objekti segamist peame ka praeguse lehe tõmbama. Praegune leht on peidetud GET-parameeter nimega paged
. Toome selle samamoodi nagu teised GET-i parameetrid, kuid kui see on tühi, seame selle vaikeväärtuseks 1.
$paged = (get_query_var('paged'))? get_query_var('paged'): 1;
Märkus. Nagu tavaline WordPressi parameeter, ei pea me filtrit paged
lisama .paged``query_vars
2 Renderdage otsinguvorm
Otsinguvorm on lihtsalt <form>
vajalike sisestustega ja vormi esitamise nupuga. HTML on täielikult teie otsustada, allolevas näites lisan sisendid lihtsas loendis. Ma ei lisa sellesse õpetusse ühtegi stiili, see on teie otsustada. Saate valida otsinguvormi stiili nii, et see asuks tulemuste ülaosas või küljel – vertikaalselt allapoole koos otsingutulemustega.
Märkus. Täpsema otsingu malli lühendamiseks ja moduleerimiseks võite otsinguvormi osa eraldada eraldi mallifailist ja lisada see [get_template_part](https://developer.wordpress.org/reference/functions/get_template_part/)()
. Kuid selle õpetuse lihtsuse huvides lisan kõik ühe mallifaili enda sisse.
Vorm ise peab olema meetodiga GET ja toiming peab osutama lehele, kus oleme. Selleks pääseme ligi globaalsele $post
objektile ja saame sealt püsiva lingi. Lõpus lisame esitamisnupu, mis vormi esitab.
Järjestamata loendisse lisame iga võimaliku otsinguparameetri jaoks sobiva sisendi. Kohandage HTML-i ja otsinguparameetreid vastavalt oma vajadustele:
Pange tähele name
atribuute; need kuvatakse vormi esitamisel URL-is. Need peavad vastama query_vars
ja get_query_var()
oleme varem määratlenud!
Ülaltoodud kood algab tekstisisestuse renderdamisest üldise tekstiotsingu jaoks. Seadsime value
varem otsitud muutujale, mille hankisime kasutades get_query_var()
. See tagab, et sisend ei tühjenda pärast otsingu tegemist.
Järgmine parameeter on žanri rippmenüü meie kohandatud taksonoomiast. Selle renderdamiseks kasutame funktsiooni [wp_dropdown_categories](https://developer.wordpress.org/reference/functions/wp_dropdown_categories/)()
. Vaadake dokumentatsiooni lehte, et näha, miks me lisame kõik need parameetrid, et kohandada rippmenüüd vastavalt oma vajadustele. On oluline, et atribuut oleks taxonomy
seatud meie kohandatud taksonoomiale, name
atribuut oleks õige ja selected
seatud eelnevalt otsitud muutuja väärtusele. Samuti määrasime terminiväärtusteks termini ID-de asemel nende nälkjad. ?book-category=fiction
Selle asemel näeb see parem välja ?book-category=42
. Samuti aktiveerime suvandi „Puudub” valiku „Iga žanr” lisamiseks.
Pärast seda renderdame autori otsimiseks teise tekstisisestuse, avaldamisaasta numbrisisestuse, ISBN-numbri tekstisisestuse ja lõpuks märkeruudu, mis on vaikimisi märkimata, et kaasata laost otsa saanud raamatud.
3 Lähtestage wp_query
Järgmine samm on väike häkkimine, et tagada lehekülgede lugemine meie kohandatud päringu puhul. Salvestame lihtsalt voolu $wp_query
mingisse muutujasse ja määrame selle väärtuseks null
. Hiljem, sammus 6, lähtestame selle $tmp_wpquery
muutujast.
$tmp_wpquery = $wp_query;
$wp_query = null;
4 Seadistage argumendid ja käivitage kohandatud päring
See osa on seotud uue päringu sooritamisega. Alustuseks seadistame kõige elementaarsemad argumendid ja seejärel lisame tingimuslikult parameetrid sõltuvalt sellest, mida varem otsitud muutujatest (meie get_query_var()
s-ist) leiti.
Ülaltoodud kood ehitab põhimõtteliselt WP_Query
parameetritega a. Dokumentatsioonileht on suurepärane ressurss päringu koostamise väljaselgitamiseks .WP_Query
paged
Juba esimesed argumendid tagavad, et esitaksime päringuid ainult raamatute kohta ja et anname varem hangitud muutuja põhjal õigesti teada, millisel lehel me praegu viibime. Postituste arv leheküljel on teie otsustada, ma määrasin selle lihtsalt 20 peale.
Pange tähele, et kui lisate " compare
" " LIKE
", paneb WordPress otsima kõike, mis sisaldab antud stringi. Ma ei lisanud seda ISBN-i otsingusse, sest tahan, et see leiaks selle välja jaoks ideaalselt sobivad tulemused.
Oluline on just lõpus, kui me päringu tegelikult sooritame ja määrame selle päringu wp_query
muutujale.
5 Sirvige päringu tulemusi ja renderdage lehekülgede arvu
See samm on tõesti lihtne. Kõik, mida vajame, on standardne tsükkel ja iga jaoks renderdame raamatupostituse nii, nagu me soovime. See osa on täielikult teie otsustada.
Allolev kood näitab tulemuste läbivaatamise põhinäidet, helistades get_template_part()
iga postituse jaoks. Pärast tsüklit the_posts_pagination()
kasutatakse leheküljelinkide renderdamiseks. Kui päring ei tagastanud ühtegi postitust, kuvatakse lihtne tekstiga lõik.
Kohandage HTML-i ja väljundit vastavalt oma vajadustele. Ülaltoodud kood eeldab teemas mallifaili, mille nimi content-book.php
on ühe tsüklis oleva raamatu renderdamiseks. Ma ei näita teile, kuidas iga postitust renderdada, kuna see on asi, mille üle tõenäoliselt juba kontrollite.
6 Lähtestage wp_query, mis see oli
Viimane samm on wp_query
objekti lähtestamine sellele, mida me varem 3. sammus salvestasime. Seadsime selle null
esmaseks, et tagada selle lähtestamine.
$wp_query = null;
$wp_query = $tmp_wpquery;
Järeldus ja lõpptulemus
Ja oligi kõik! Nüüd peaks teil olema täielikult toimiv täiustatud kohandatud otsingu mall. Loodan, et sellest on teile abi olnud – kood on kirjutatud võimalikult üldiseks, et teil oleks lihtne oma vajadustega kohaneda. Võib-olla soovite erinevat tüüpi parameetreid või on teie kohandatud postituse tüüp filmide või millegi muu jaoks!
Mõne põhilise stiiliga võib see hõlpsasti välja näha umbes selline:
Siin on lõplik kood; osa functions.php
ja mall: