✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Kuinka luoda mukautettu tarkennettu hakumalli WordPressissä

10

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

Kuinka luoda mukautettu tarkennettu hakumalli WordPressissä

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_queryobjektin 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_postsja manipuloida wp_queryobjektia. 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_queryobjektin 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 bookmukautetun 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.phptai 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ä:

Kuinka luoda mukautettu tarkennettu hakumalli WordPressissä

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.phptai page.phpja 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ä:

  1. Tallenna kaikki lomakkeen aiemmin lähettämät muuttujat käyttämällä get_query_var(). On myös tallennettava nykyinen sivu
  2. Piirrä hakulomake lähetyspainikkeella haun suorittamista varten
  3. Nollaa wp_queryobjekti
  4. Aseta uuden argumentit WP_Query()haettujen parametrien mukaan ja suorita kysely. Määritä mukautettu kysely wp_queryobjektille
  5. Selaa tuloksia ja näytä ne. Muodosta myös sivutuslinkit
  6. Palauta wp_queryobjekti 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_queryobjektin 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=benjaminURL-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_querykohteen. 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 pagedtavallinen WordPress-parametri, meidän ei tarvitse lisätä pagedsuodattimeen 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 $postobjektia 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 nameominaisuudet; ne näkyvät URL-osoitteessa, kun lomake lähetetään. Niiden on vastattava query_varsja get_query_var()olemme määritelleet aiemmin!

Yllä oleva koodi alkaa hahmontamalla tekstisyöte yleistä tekstihakua varten. Asetamme valueaiemmin 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 taxonomyasetettu mukautettuun taksonomiimme, nameattribuutti on oikea ja selectedse on asetettu aiemmin haetun muuttujan arvoon. Määritimme myös termien arvot niiden sluksiksi termitunnusten sijaan. Se näyttää paremmalta sen ?book-category=fictionsijaan ?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_queryjohonkin muuttujaan ja asetamme sen arvoon null. Myöhemmin vaiheessa 6 nollaamme sen $tmp_wpquerymuuttujasta.

$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_Queryparametrien 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ä – pagedaiemmin 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_querymuuttujalle.

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.phpyhden 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_queryobjektin palauttaminen siihen, mitä olemme tallentaneet aiemmin vaiheessa 3. Asetamme sen nullensimmä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ä:

Kuinka luoda mukautettu tarkennettu hakumalli WordPressissä

Tässä on lopullinen koodi; osa functions.phpja malli:

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja