Tämä opas on sinulle, jolla on mukautettu viestityyppi (CPT) ja haluat tarkennetun hakusivun, joka hakee tuloksia tästä CPT:stä. Hakulomakkeessa voit määrittää eri syötteitä eri kenttien sisällä etsimistä varten; viestin otsikko, sisältö, minkä tahansa mukautetun metan tai mukautetun taksonomian mukaan.
Tässä viestissä oletetaan, että meillä on mukautettu viestityyppi kirjoille, liitteenä mukautettu taksonomia kirjalajille ja joukko mukautettuja metatietoja; tekijä, julkaisuvuosi, ISBN-numero ja valintaruutu, onko kirjaa varastossa vai ei. Mukautettu viestityyppi ja parametrit ovat täysin sinun tarpeidesi mukaisia, alla oleva koodi yrittää yksinkertaisesti kattaa suurimman osan perusteista.
Mitä teemme
Luomme kirjoille mukautetun viestityypin ja siihen liitettävän mukautetun hierarkkisen taksonomian genrelle. Lisäksi jokaisessa kirjassa on mukautetut kentät tekijä(t), julkaisuvuosi, ISBN-numero ja valintaruutu, sisällytetäänkö loppuneet kirjat vai ei. Mitä tulee itse hakusivuun, teemme sivumallin, jossa suurin osa koodistamme sijaitsee. Sivu alkaa hahmontamalla mukautettu lomake alussa; näyttää kaikki mahdolliset parametrit tulosten suodattamiseksi. Sen alapuolella kaikki kirjojen tulokset näkyvät luettelona. Päätämme tulosten lukumäärän sivua kohden ja lisäämme sivuttamisen alareunaan, jos määrä ylittää tämän.
Nämä ovat mahdolliset suodatinparametrit, jotka luomme tarkennettua hakumalliamme varten:
- Tekstinsyöttö minkä tahansa merkkijonon hakemiseen viestin otsikossa ja sisällössä.
- Pudotusvalikko genren valintaa varten. Mahdollistaa termin valitsemisen tai sen jättämisen "Mikä tahansa".
- Syöte kirjoittajan nimen kirjoittamista varten, joka hakee mukautetusta metasta. Löysä vastaavuus, mikä tarkoittaa "Mark"-merkin kirjoittamista, palauttaa kaikki kirjoittajat, joiden nimi on tai sisältää "Mark".
- Numerosyöttö kirjan julkaisuvuodelle, joka hakee mukautetussa metamuodossa. Löysä yhteensopivuus, mikä tarkoittaa esimerkiksi "20" kirjoittamista, sopii mihin tahansa vuonna 1920 julkaistuun kirjaan tai minkä tahansa 20-luvulla alkavan vuoden kirjan kanssa.
- Syöte ISBN:n (kansainvälinen kirjatunnus) syöttämiseen, joka hakee mukautetusta metasta. Palauttaa vain tarkat osumat.
- Valintaruutu, sisällytetäänkö loppukirjat, vielä yksi mukautettu meta. Oletuksena tätä ei ole valittu, mikä tarkoittaa, että tulokset näyttävät vain varastossa olevat kirjat.
Lomake on määritetty käyttämään GET-menetelmää, mikä tarkoittaa, että kaikki haetut parametrit liitetään sivulle URL-osoitteessa muodossa " ?book-search=world&year-published=2016&book-author=mark
". Toinen vaihtoehto, jos haluat välttää "rumien URL-osoitteiden" käyttämisen, on Javascriptin ja AJAXin käyttö. Mutta tässä on joitain huonoja puolia. Ensinnäkin hakua ei voi lisätä kirjanmerkkeihin tietyillä hakuparametreilla "esitäytetyillä". Kuvittele, että haluat muualla sivustossasi linkittää suoraan tietyn kirjoittajan mukautettuun hakusivullesi. Voit sitten saada linkin siirtymään hakusivullesi, lisätä " ?author=mark
", jolloin linkin napsauttaminen johtaa suoraan kyseisen kirjoittajan tuloksiin. Tämä ei ole mahdollista saavuttaa AJAXilla.
Hakuparametrit kattavat toisensa. Tämä tarkoittaa, että yhdistämällä esimerkiksi vuosi "2011" ja kirjoittaja "Some guy" palauttaa vain kirjat, jotka vastaavat molempia. Jos määritämme myös "hauska" yleisessä haun tekstinsyötössä, saamme vain tulokset, jotka vastaavat kaikkia näitä kolmea. Sanotaan eri sanoin; käytämme JA-logiikkaa. Tämä on yleisin tapa suodattaa hakutuloksia.
Tämä opetusohjelma ei sisällä muotoilua, joten tämä osa on sinun. Alla on esimerkki siitä, miltä tämä voisi näyttää jollain perustyylillä.
Huomautus sivutuksesta mukautetulla kyselyllä
Jos haluat sivutusta mukautetussa kyselyssä yhdellä sivulla, sinun on otettava huomioon muutama seikka. Kyselyn sivutus voidaan luoda WordPress-funktioilla [the_posts_pagination](https://developer.wordpress.org/reference/functions/the_posts_pagination/)()
, [paginate_links](https://developer.wordpress.org/reference/functions/paginate_links/)()
tai kahdella [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/)()
. Nämä on kuitenkin koodattu toimimaan globaalin wp_query
objektin kanssa (joka sivumallille on itse sivu), ei mukautetun kyselyn kanssa.
On olemassa muutamia kiertotapoja, kuten sivutustoiminnon kirjoittaminen itse. Tai voit käyttää toimintoa pre_get_posts
ja manipuloida wp_query
objektia. Valitettavasti tämä menetelmä on liian myöhäistä vaikuttaa sivutustoimintoihin. Toinen vaihtoehto on ohittaa sivutus kokonaan ja näyttää kaikki viestit. Tämä voisi olla vaihtoehto, jos sinulla ei ole paljon viestejä, mutta jos teet tarkennettua mukautettua hakumallia – oletan, että sinulla on melko vähän viestejä.
Se, mitä teemme tässä oppaassa, on eräänlainen "hakkeroitu" menetelmä. Sivumallin sisällä ohitamme wp_query
objektin mukautetulla kyselyllämme, jotta silmukka- ja sivutustoiminnot toimivat odotetulla tavalla. Tällä menetelmällä olen onnistunut eniten.
Aloitetaan koodaaminen ilman pitkiä puheita!
Mukautetun viestityypin, taksonomian ja metakenttien määrittäminen
Ensimmäinen vaihe on määrittää mukautettu viestityyppi, jolle haluamme luoda tarkennetun hakumallin. Jos olet jo määrittänyt mukautetun viestityypin tai haluat ottaa sen käyttöön viesteissä tai sivuissa, voit siirtyä suoraan eteenpäin seuraavaan osaan.
Määrittelemme book
mukautetun viestityypin hierarkkisella mukautetulla taksonomialla book_category
. En mene yksityiskohtiin selittääkseni kuinka luodaan mukautettuja viestityyppejä ja taksonomioita tässä. Jos olet kiinnostunut oppimaan lisää, minulla on postaus, joka käsittelee tätä yksityiskohtaisesti.
Laita tämä koodi mihin tahansa teemasi functions.php
tai laajennuskoodiisi:
Tämä johtaa mukautettuun viestityyppiin, johon on liitetty taksonomia järjestelmänvalvojassa.
Mukautetun postin metan määrittäminen on hieman sinun päätettävissäsi – joko käsittele sitä manuaalisesti [add_meta_box](https://developer.wordpress.org/reference/functions/add_meta_box/)()
tai käytä Advanced Custom Fields (ACF) -laajennusta, joka sopii täydellisesti tällaiseen työhön. Käytän ACF:ää kenttien ohjelmointiin, kuten:
Voit tietysti määrittää ACF-kentät käyttämällä ACF:n järjestelmänvalvojan käyttöliittymää. Mutta niiden lisäämisestä koodilla on useita etuja. Esimerkiksi varmistamalla, että pidät samat kentät aina, kun aktivoit teemasi tai laajennuksen. Jos määrität kentät järjestelmänvalvojassa, sinun on muistettava viedä ja tuoda ne, jos vaihdat WordPress-sivustoa.
Huomaa meta-nimet; esim book_author
. year_published
, ja niin edelleen. Viittaat näihin, kun luomme mukautetun kyselyn tarkennetun haun malliin.
ACF-laajennuksen ja yllä olevan koodin avulla yksittäinen kirja näyttäisi tältä:
Tämän avulla voimme kaikki luoda niin monta kirjapostausta kuin haluamme. Seuraava vaihe on sivumallin luominen hakuamme varten.
Sivumallin luominen
Luodaan sivumalli, johon laitamme tarkennetun haun mallimme. Tee kopio teemastasi single.php
tai page.php
ja nimeä se uudelleen esimerkiksi template-booksearch.php
. HTML on sinun päätettävissäsi, mutta syy, miksi teemme kopion yksittäisestä tai sivusta, johtuu siitä, että ne ovat luultavasti asettelultaan lähin malli.
Sivun mallipohjan yläreunassa ilmoitamme, että tämä on sivumalli, kirjoittamalla "Mallin nimi" ja sen nimi kommenttikenttään. Näin varmistamme, että voimme valita sivumallin, kun muokkaamme sivua.
Osat, jotka meidän on koodattava mallissamme, ovat seuraavat tässä järjestyksessä:
- Tallenna kaikki lomakkeen aiemmin lähettämät muuttujat käyttämällä
get_query_var()
. On myös tallennettava nykyinen sivu - Piirrä hakulomake lähetyspainikkeella haun suorittamista varten
- Nollaa
wp_query
objekti - Aseta uuden argumentit
WP_Query()
haettujen parametrien mukaan ja suorita kysely. Määritä mukautettu kyselywp_query
objektille - Selaa tuloksia ja näytä ne. Muodosta myös sivutuslinkit
- Palauta
wp_query
objekti siihen, mikä se oli
Syy, miksi meidän on tallennettava kaikki haetut muuttujat ja nykyinen sivu aikaisin, johtuu siitä, että nämä muuttujat menetetään, kun nollaamme wp_query
objektin vaiheessa 3. Tarvitsemme myös muuttujat hakulomakkeellemme kenttien täyttämiseksi.
Valitse mallissasi paikka, johon haluat tulostaa mukautetun haun, ja aloitetaan ylhäältä:
1 Hae kaikki haetut muuttujat
Saamme GET-parametrit (URL-osoitteesta) [get_query_var](https://developer.wordpress.org/reference/functions/get_query_var/)()
. Esimerkiksi; jos ?book-author=benjamin
URL-osoitteessa on parametri, käyttäminen get_query_var('book-author')
palauttaisi merkkijonon " benjamin
". Kaikkien muuttujien hakeminen voidaan tehdä seuraavasti:
$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');
Mutta nämä ovat kaikki mukautettuja parametreja, jotka eivät ole osa WordPressin standardi GET-parametreja. WordPress jättää huomioimatta kaikki GET-parametrit, joita se ei tunne, joten niiden kutsuminen palauttaa aina tyhjän merkkijonon. Meidän on kehotettava WordPressiä sallimaan jokainen näistä GET-parametreista. Teemme tämän suodattamalla query_vars
. Lisää myös tämä functions.php
:
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;
});
Nyt meidän get_query_var()
pitäisi pystyä hakemaan GET-parametrit. Jos niitä ei ole asetettu, se palauttaa tyhjän merkkijonon.
Meidän on myös noudettava nykyinen sivu ennen kuin sotkemme wp_query
kohteen. Nykyinen sivu on piilotettu GET-parametri nimeltä paged
. Haemme sen samalla tavalla kuin muut GET-parametrimme, mutta asetamme sen oletusarvoon 1, jos se on tyhjä.
$paged = (get_query_var('paged'))? get_query_var('paged'): 1;
Huomautus: Kuten paged
tavallinen WordPress-parametri, meidän ei tarvitse lisätä paged
suodattimeen query_vars
.
2 Suorita hakulomake
Hakulomake on yksinkertaisesti a <form>
, jossa on tarvittavat syötteet ja lomakkeen lähetyspainike. HTML on täysin sinun päätettävissäsi. Alla olevassa esimerkissä lisään syötteet yksinkertaiseen luetteloon. En sisällytä tähän opetusohjelmaan mitään tyyliä, se on sinun. Voit valita hakulomakkeen tyylin niin, että se sijaitsee tulosten yläosassa tai sivussa – pystysuoraan alaspäin hakutulosten mukana.
Huomautus: Tarkennetun haun mallin lyhentämiseksi ja modulisoimiseksi voit erottaa hakulomakkeen osan erilliseksi mallitiedostoksi ja sisällyttää sen tiedostoon [get_template_part](https://developer.wordpress.org/reference/functions/get_template_part/)()
. Mutta tämän opetusohjelman yksinkertaisuuden vuoksi sisällytän kaiken yhden mallitiedoston sisällä.
Itse lomakkeen on oltava menetelmällä GET, ja toiminnon on osoitettava sivulle, jolla olemme. Tätä varten käytämme globaalia $post
objektia ja saamme pysyvän linkin siitä. Lopuksi lisäämme lähetyspainikkeen, jolla lomake lähetetään.
Järjestämättömään luetteloon lisäämme sopivan syötteen jokaiselle mahdolliselle hakuparametrillemme. Muokkaa HTML-koodia ja hakuparametreja tarpeidesi mukaan:
Huomioi name
ominaisuudet; ne näkyvät URL-osoitteessa, kun lomake lähetetään. Niiden on vastattava query_vars
ja get_query_var()
olemme määritelleet aiemmin!
Yllä oleva koodi alkaa hahmontamalla tekstisyöte yleistä tekstihakua varten. Asetamme value
aiemmin haettuun muuttujaan, jonka haimme käyttämällä get_query_var()
. Tämä varmistaa, että syöte ei poistu haun jälkeen.
Seuraava parametri on tyylilajin pudotusvalikko mukautetusta taksonomiasta. Tämän tuottamiseksi käytämme funktiota [wp_dropdown_categories](https://developer.wordpress.org/reference/functions/wp_dropdown_categories/)()
. Katso dokumentaatiosivulta, miksi lisäämme kaikki nämä parametrit mukauttaaksemme pudotusvalikon tarpeisiimme. On tärkeää, että attribuutti on taxonomy
asetettu mukautettuun taksonomiimme, name
attribuutti on oikea ja selected
se on asetettu aiemmin haetun muuttujan arvoon. Määritimme myös termien arvot niiden sluksiksi termitunnusten sijaan. Se näyttää paremmalta sen ?book-category=fiction
sijaan ?book-category=42
. Aktivoimme myös "ei mitään" -vaihtoehdon "Kaikki genre" -vaihtoehdon lisäämiseksi.
Tämän jälkeen kirjoitamme toisen tekstisyötteen tekijän etsimistä varten, numerosyötteen julkaisuvuodelle, tekstisyötteen ISBN-numerolle ja lopuksi valintaruudun, joka on oletusarvoisesti valitsematon sisällyttääksesi loppuneet kirjat.
3 Nollaa wp_query
Seuraava askel on pieni hakkerointi varmistaaksemme, että sivutus toimii mukautetussa kyselyssämme. Tallennamme virran $wp_query
johonkin muuttujaan ja asetamme sen arvoon null
. Myöhemmin vaiheessa 6 nollaamme sen $tmp_wpquery
muuttujasta.
$tmp_wpquery = $wp_query;
$wp_query = null;
4 Määritä argumentit ja suorita mukautettu kysely
Tämä osa koskee uuden kyselyn suorittamista. Aloitamme asettamalla perusargumentit ja lisäämme sitten ehdollisesti parametreja riippuen siitä, mitä löydettiin aiemmin haetuista muuttujista (simme get_query_var()
).
Yllä oleva koodi rakentaa periaatteessa WP_Query
parametrien avulla. Sivuston dokumentaatiosivuWP_Query
on loistava resurssi kyselyn luomiseen .
Aivan ensimmäiset argumentit varmistavat, että teemme kyselyitä vain kirjoista ja että ilmoitamme oikein, millä sivulla olemme tällä hetkellä – paged
aiemmin hakemastamme muuttujasta. Sivulla olevien viestien määrä on sinun päätettävissäsi, olen vain asettanut sen 20:een.
Huomaa, että " compare
" lisääminen kohtaan " LIKE
" saa WordPressin etsimään mitä tahansa, joka sisältää annetun merkkijonon. En lisännyt tätä ISBN-hakuun, koska haluan tämän kentän löytävän täydellisesti vastaavat tulokset.
Tärkeintä on aivan lopussa, kun suoritamme kyselyn ja määritämme sen wp_query
muuttujalle.
5 Selaa kyselyn tuloksia ja piirrä sivutus
Tämä vaihe on todella helppo. Tarvitsemme vain tavallisen silmukan, ja jokaiselle teemme kirjajulkaisun haluamallamme tavalla. Tämä osa on täysin sinun päätettävissäsi.
Alla oleva koodi näyttää perusesimerkin tulosten selaamisesta ja kutsumisesta get_template_part()
jokaiselle viestille. Silmukan jälkeen the_posts_pagination()
käytetään sivutuslinkkien hahmontamiseen. Jos kysely ei palauttanut yhtään viestiä, näkyviin tulee yksinkertainen kappale, jossa on teksti.
Säädä HTML ja lähtö tarpeidesi mukaan. Yllä oleva koodi odottaa mallitiedostoa teemassa, joka on nimetty content-book.php
yhden kirjan renderöimiseksi silmukassa. En näytä sinulle, kuinka jokainen viesti hahmonnetaan, koska tämä on asia, jota jo todennäköisesti hallitset.
6 Palauta wp_query siihen, mikä se oli
Viimeinen vaihe on wp_query
objektin palauttaminen siihen, mitä olemme tallentaneet aiemmin vaiheessa 3. Asetamme sen null
ensimmäiseksi varmistaaksemme, että se on nollattu.
$wp_query = null;
$wp_query = $tmp_wpquery;
Johtopäätös ja lopputulos
Ja siinä se oli! Sinulla pitäisi nyt olla täysin toimiva edistynyt mukautettu hakumalli. Toivottavasti tästä on ollut sinulle apua – koodi on kirjoitettu mahdollisimman yleiseksi, jotta sinun on helppo mukautua tarpeisiisi. Ehkä haluat erityyppisiä parametreja tai mukautettu viestityyppisi on elokuvia tai jotain muuta varten!
Jollain perustyylillä se voi helposti näyttää tältä:
Tässä on lopullinen koodi; osa functions.php
ja malli: