WordPress on CMS ja siksi sisällön manipulointi on yksi työkalun peruspilareista. Tässä viestissä ymmärrät WP: n käyttämän prosessin hakea mitä on näytettävä ja myös miten on mahdollista muuttaa tätä prosessia.
tämän tekstin tarkoituksena ei suinkaan ole korvata virallisia asiakirjoja, joihin on aina tutustuttava. Sinun tehtäväsi on laittaa yhteen paikkaan, mitä aloittelijoille pitäisi tietää ennen kuin he alkavat etsiä lisätietoja.
- mikä on WordPress-kysely?
- mikä on WP_Query?
- ehdolliset tägit ja WP_Query
- omien silmukoiden luominen: WP_Query ja get_posts ()
- silmukan luominen wp_queryllä
- loop with get_posts ()
- ero Wp_queryn ja get_postsin () välillä
- global WordPress Wp_query and WordPress Wp_the_query
- miksi query_posteja() ei pitäisi käyttää teematiedostoissa?
- miten muuttaa pääkyselyä? Käytä pre_get_posteja
- toinen esimerkki: Poista kategoria blogikirjoitusten luettelosta
- johtopäätös
mikä on WordPress-kysely?
kysely tarkoittaa englanniksi kyselyä ja on yleensä termi, jolla viitataan SQL-kielessä olevaan lauseeseen (strukturoitu kyselykieli). WordPress kutsumme kyselyt kyselyt sisällön kautta wp_query Luokka.
mikä on WP_Query?
WP_Query on PHP-luokka kaikkien WordPressin sisältöhakujen takana. Se hyväksyy useita parametreja rakenteensa, mukaan lukien post tyypit, metatiedot, taksonomiat, ja päivämäärät, sekä mahdollistaa luoda mukautettuja parametreja.
wp_query-Luokka käynnistyy kaikista sivustollesi tehdyistä pyynnöistä, lukuun ottamatta ehkä hyvin harvinaisia poikkeuksia, jotka koskevat Liitännäisohjattuja osoitteita, jotka keskeyttävät normaalin virtauksen. Aina kun kutsumme sivun, post, taksonomian termi ja jne. WordPress tulkitsee pyydetyn osoitteen kautta rewrite API ja luo wp_query perustuu tulkittu argumentteja.
ehdolliset tägit ja WP_Query
omien silmukoiden luominen: WP_Query ja get_posts ()
kun viittaamme WordPressissä silmukkaan, puhumme valittujen virkojen iteroinnista (ilman N: ää). Yleensä meillä on vain yksi silmukka, joka muistuttaa aina alla olevaa koodia:
jos virkoja on, iteroi niiden yli. Ensimmäinen lauseke while
sisällä on the_post()
, joka käskee WordPressiä laittamaan silmukan seuraavan postauksen muuttujat globaaliin muuttujaan $post
, wp_query-luokan setup_postdata()
– menetelmällä.
tämä on pääsilmukan eli viestijoukon iterointi, jonka WordPress löysi purkaessaan pyyntöä ja etsiessään vastaavaa sisältöä. Jos tarvitsemme toisen joukon viestejä (liittyvä sisältö, sisältö tietyn luokan ulkopuolella tiedoston tai julkaisuja jälkeen, mitä näytetään, esimerkiksi) voimme tehdä tämän kahdella tavalla: luomalla uuden wp_query objektin tai kutsumalla get_posts () toiminto. Molemmat tekevät samaa, mutta palaavat sinulle eri asioita.
silmukan luominen wp_queryllä
yksinkertainen esimerkki silmukan luomisesta wp_queryllä:
huomaa, miten testi ja iterointi have_posts()
pysyvät siellä, aivan kuten the_post()
, mutta tällä kertaa luomamme muuttujan menetelminä.
funktio wp_reset_postdata () palauttaa globaalin muuttujan $post
tilaansa ennen kyselyämme, eli se palauttaa globaalin $post
Post globaalin $wp_query
, jonka näemme myöhemmin.
loop with get_posts ()
sama esimerkki käyttäen funktiota get_posts()
:
funktio get_the_title () hyväksyy parametriksi postauksen, joka eroaa siitä, mitä globaalissa muuttujassa $post
on. Jos sinun on käytettävä esimerkiksi funktiota_content (), sinun on muutettava globaalia funktiota seuraavasti:
ero Wp_queryn ja get_postsin () välillä
perusero on se, mitä sinulla on käytettävissäsi. Käyttämällä Wp_querya pääset käsiksi esimerkiksi löytyneiden julkaisujen määrään ($query->found_posts
) ja mahdollisten sivujen määrään ($query->max_num_pages
). get_posts()
– funktio taas tuo joitain jo täytettyjä argumentteja sen lisäksi, että se on oletusarvoisesti hieman nopeampi: se ohittaa no_found_rows
– parametrin totena, estäen lopullista kyselyä saamasta SQL_CALC_FOUND_ROWS
– vaihtoehtoa ja tämän myötä vapauttaen MySQL: n ohittamasta löydettyjen rivien kokonaismäärää.
global WordPress Wp_query and WordPress Wp_the_query
tässä prosessissa pyynnön tulkitseminen ja wp_query-luokan objektin tuottaminen WordPress luo kaksi maailmanlaajuista muuttujaa: $wp_query
, jonka olet varmaan nähnyt jossain, ja $wp_the_query
, joka on aina alkuperäinen kopio käyttäjän pyytämästä. Jos joku sotkee $wp_query
: n kanssa, niin ainakin saamme sen takaisin normaalitilaansa $wp_the_query
: n kanssa. Funktio wp_reset_query() toimii juuri näin.
miksi query_posteja() ei pitäisi käyttää teematiedostoissa?
tämä on pyynnön oletusarvo sivustosi osoitteeseen kojelaudan ulkopuolella:
query_postsia() ei kannata käyttää, koska sitä on kutsuttu aiemmin. Soittamalla uudelleen kopioit käsittelyn (pyydät WordPress tehdä toisen kyselyn) ja lisäksi mahdollisesti sivuuttaa mitä jotkut plugins ovat jo käyttäneet.
hakulaitteet ovat toinen esimerkki siitä, miten query_posts()
käyttäminen voi häiritä työtäsi. Jos haluat näyttää 15 viestiä per sivu tietyssä kategoriassa ja yrittää korvata WP: n oletussumman query_posts()
kautta, joudut tilanteeseen, jossa toisen sivun ensimmäisen kohteen pitäisi olla 16., mutta itse asiassa se on vasta 11.
miten muuttaa pääkyselyä? Käytä pre_get_posteja
query_posts()
käyttäminen ei ole ollut suositeltavaa jo jonkin aikaa. Sittemmin monet ovat selittäneet, miksi ja kannustaneet kehittäjiä käyttämään toimintaa pre_get_posts, erityisesti Leo Bahiano, joka hellästi lempinimeltään toiminta preguetinho (käyttö sanaleikkejä kanssa preguetinho do Leo Bahiano on valtuutettu Kommentit).
käyttö on yksinkertaista. Poistaaksesi hakulaitteen, esimerkiksi, voit käyttää seuraavaa koodia teeman functions.php
:
koodi antaa funktionsa koukulle pre_get_posts
, joten sen funktio suoritetaan joka kerta, kun kyselyä käsitellään. Sen sisällä meidän on varmistettava, että työskentelemme vain välttämättömien kyselyjen parissa, joten testaamme, olemmeko todella sivuston ”etuosassa” (tällä tavalla emme häiritse paneelista mitään), jos olemme sivun pääkyselyssä, eli jos kyseinen kysely on $wp_the_query
ja jos kaikki tämä on totta, muutamme attribuutin posts_per_page
-1
, mikä tarkoittaa, ettei julkaisujen määrää ole rajoitettu.
toinen esimerkki: Poista kategoria blogikirjoitusten luettelosta
jos tarvitset monia muutoksia, voit yhdistää ne kaikki yhteen funktioon: