✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas luua WordPressis kohandatud täpsema otsingu malli

15

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.

Kuidas luua WordPressis kohandatud täpsema otsingu malli

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_queryobjektiga (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_postsmanipuleerida. wp_queryKahjuks 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_queryobjekti 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 bookkoos 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.phpvõ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_publishedja 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:

Kuidas luua WordPressis kohandatud täpsema otsingu malli

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.phpvõi page.phpja 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:

  1. Salvestage kõik vormi poolt varem esitatud muutujad, kasutades get_query_var(). Samuti tuleb salvestada praegune leht
  2. Otsingu tegemiseks renderdage otsinguvorm esitamisnupuga
  3. Lähtestage wp_queryobjekt
  4. Seadistage uue argumendid WP_Query()sõltuvalt otsitud parameetritest ja käivitage päring. wp_queryMäärake objektile kohandatud päring
  5. Sirvige tulemusi ja kuvage need. Samuti renderdage lehekülgede lingid
  6. Lähtestage wp_queryobjekt 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_queryobjekti 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=benjaminURL-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.phpLisage 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_queryEnne 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 pagedlisama .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 $postobjektile 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 nameatribuute; need kuvatakse vormi esitamisel URL-is. Need peavad vastama query_varsja get_query_var()oleme varem määratlenud!

Ülaltoodud kood algab tekstisisestuse renderdamisest üldise tekstiotsingu jaoks. Seadsime valuevarem 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 taxonomyseatud meie kohandatud taksonoomiale, nameatribuut oleks õige ja selectedseatud eelnevalt otsitud muutuja väärtusele. Samuti määrasime terminiväärtusteks termini ID-de asemel nende nälkjad. ?book-category=fictionSelle 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_querymingisse muutujasse ja määrame selle väärtuseks null. Hiljem, sammus 6, lähtestame selle $tmp_wpquerymuutujast.

$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_Queryparameetritega a. Dokumentatsioonileht on suurepärane ressurss päringu koostamise väljaselgitamiseks .WP_Query

pagedJuba 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_querymuutujale.

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.phpon ü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_queryobjekti lähtestamine sellele, mida me varem 3. sammus salvestasime. Seadsime selle nullesmaseks, 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:

Kuidas luua WordPressis kohandatud täpsema otsingu malli

Siin on lõplik kood; osa functions.phpja mall:

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem