Jos suunnittelet tai kehität WordPress-teemoja tai laajennuksia, on hyvä mahdollisuus, että jonain päivänä sinun on tehtävä kysely muokatuille metakentille. Nämä ovat täysin mukautettuja avain / arvo-pareja, jotka voit liittää mihin tahansa viestiin, sivuun tai mukautettuun postityyppiin. WordPressillä on heille oletusarvoisesti peruskäyttöliittymä, tai voit käyttää jotain mukautettua mukautettua kenttää, jotta voit nauttia niistä. Mutta konepellin alla ACF käyttää säännöllisiä mukautettuja kenttiä.
Tämä juuri katkelmasivu, jota tarkastelet juuri nyt, on kirjoitettu vuonna 1999. Tuolloin sinun on käytettävä `$ wpdb` -muuttujaa voidaksesi kysyä tietyillä mukautetuilla kentillä varustettuja viestejä. Sitä voidaan käyttää luomaan MySQL-kyselyitä, joita WordPress WP_Query () -luokka ei tue. Onneksi tänään WordPressillä on argumentteja, jotka tukevat mukautettujen metakenttien kyselyjä.
Tässä käsitellään erilaisia tapoja, joilla voit pyytää ja luoda silmukoita tietyille mukautetuille kentille (ja niiden arvoille). Voit käyttää näitä tietoja riippumatta siitä, käytätkö WP_Query
luokkaa query_posts()
tai get_posts()
. Koska query_posts()
ja get_posts()
ovat WP_Query
luokan kääreitä . He kaikki hyväksyvät samat perustelut.
Kyselyargumentit
Tässä on perusesimerkki WordPress-kyselystä, joka on otettu WordPress Codexista.
have_posts() ) ( echo '
'; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
- ' . get_the_title() . '
'; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();
Se $args
on tärkeä bitti siellä. Annamme erilaisia argumentteja, jotta tämä toimisi haluamallamme tavalla.
Kun kysytään mukautettua metaa, voit käyttää kahta argumenttiryhmää. Yksi ryhmä on tarkoitettu yksinkertaisille mukautetuille metakentäkyselyille ja toinen ryhmä monimutkaisemmille mukautetuille metakenttien kyselyille. Aloitetaan yksinkertaisesta ryhmästä.
meta_key
meta_key
Argumentti kyselyn tointa, jolla on muokattu kenttä meta tunnus tallennetaan tietokantaan, vai ei on arvo tallennetaan kenttään. Tämä meta_key
on tunnus, jonka annat metakentillesi. Kuten tämä:


Tämä esimerkki kysyy kaikista viesteistä, joilla on mukautettu metakenttä, jonka tunnus on "field1".
$args = array( 'meta_key' => 'field1' );
meta-arvo
meta_value
Väite kyselyt postitse, joiden arvo määritellään. meta_value
Argumentti käytetään merkkijonoarvoja. Tämä esimerkki kysyy kaikista viesteistä, joissa on mukautettu metakenttä, jonka arvo on "data1".
$args = array( 'meta_value' => 'data1' );
Voit myös yhdistää nämä kaksi. Tämä esimerkki kyselee vain viestejä, joilla on oma metakenttä, jonka tunnus on "kenttä1" ja jonka arvo on "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Meta_value_num-argumentti on samanlainen kuin meta_value-argumentti. Jos meta_value
argumentti on merkkijonoarvoille, se meta_value_num
on tarkoitettu numeerisille arvoille.
Tämä esimerkki näyttää, miten kysytään mukautetulta kentältä1 kenttä, jos sen arvo on 10.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_vertaa
meta_compare
Argumentti tekee juuri sitä miltä se kuulostaakin. Sen avulla voit käyttää vertailijoita argumenttien "meta_value" ja "meta_value_num" kanssa. Voit käyttää vertailijoita '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , ”BETWEEN”, “NOT BETWEEN”, “NOT OLEMASSA”, “REGEXP”, “NOT REGEXP” tai ”RLIKE”. Tässä on esimerkki, joka osoittaa, miten kysytään viesteistä, joilla ei ole arvoa "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Monimutkaisemmat kyselyt
meta_query
Tärkein argumentti, jota käytät monimutkaisissa kyselyissä, on meta_query
. Tämä oma väite ei tee mitään. Se vain kertoo WordPressille, että haluat tehdä kyselyn mukautetuille metakentille. Lisää muita argumentteja, meta_query
joita käytetään kyselyn määrittelemiseen.
avain, arvo ja vertailu
Argumentit key
, value
toimivat täsmälleen samalla tavalla kuin meta-key
, meta-value
kuten edellä on kuvattu. Kompleksi compare
on samanlainen kuin yllä oleva yksinkertainen compare
, mutta siihen tarvitaan erilainen luettelo vertailijoista. Kompleksi compare
käyttää '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN "," EI VÄLILLÄ "," OLEMASSA "tai" EI OLEMASSA ". value
voi olla matriisi, mutta vain silloin, kun vertailu käyttää 'IN', 'NOT IN', 'BETWEEN' tai 'NOT BETWEEN'.
Jos käytät 'OLEMASSA' tai 'EI OLOSSA' compare
, sinun ei tarvitse määrittää value
argumenttia.
Tässä on esimerkki, joka kyselee viestejä, jos sillä on ”kenttä1” arvolla ”data1” ja ”kenttä2” arvolla, joka ei ole ”data2”.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
suhde
Tätä relation
käytetään, kun haluat kysyä mukautettuja metatietoja loogisen suhteen avulla. Voit käyttää AND
tai OR
. Esimerkiksi AND
vertaillaan, täyttävätkö data1 ja data2 kriteerit, ja sitä, OR
jos data1 tai data2 täyttävät ehdot.
Tämä väite on itsenäinen. Eli se ei näy yksittäisissä mukautetuissa metakentän parametreissa. Katsotaanpa esimerkkiä. Tämä esimerkki kyselee vain viestejä, joiden kenttä on "kenttä1" arvolla "data1" ja "kenttä2" arvolla "data2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Jos vaihdat relation
tilaan “OR”. Sitten se kysyisi viestejä, jos kentän1 arvo on "data1" tai jos kentän2 arvo "data2".
tyyppi
type
Argumentilla voidaan valita tiedon tyyppi kyselyn. Voit käyttää 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME' tai 'UNSIGNED'.
”DATE” -tyyppiä voidaan käyttää compare
”BETWEEN”: n kanssa vain, jos päivämäärämuoto on ”VVVVKKPP”.
Tämä esimerkki kyselee mitä tahansa viestiä, jossa kentän1 arvo on numeerinen.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Esimerkki reaalimaailmasta
Toistaiseksi olen antanut vain esimerkkejä mielivaltaisista tiedoista ja kentistä. Haluaisin nyt näyttää sinulle todellisen esimerkin mukautettujen metakenttien kyselystä.
Skenaario
Olet luonut tapahtumien mukautetun viestityypin. Tapahtumapostityypillä on päivämäärän mukautettu kenttä, jonka tunnus on event_date
. Haluat luoda kyselyn, joka näyttää kaikki tapahtumat, jotka alkavat kuluvan päivän aikana seuraavien 30 päivän ajan.
Aiomme käyttää meta_query
argumenttia, koska haluamme käyttää type
argumenttia määrittelemään "tapahtuman_päivä" -kentän "DATE" -tietotyypiksi.
Tämä on kysely:
$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );
Tämä value
on nykyisen päivämäärän taulukko - 1 päivä ja 31 päivää nykyisestä päivästä. Koska käytämme vertailijaa "BETWEEN", vain arvoryhmän väliset viestit kysytään, joten haluamme korvata ne yhdellä päivällä.
Tämän kyselyn avulla näytät kaikki tapahtumat, jotka tapahtuvat seuraavien 30 päivän aikana.
Johtopäätös
WP_Query
Luokka on erittäin joustava luokka, jonka avulla voit luoda monenlaisia muokattuja kyselyitä. Jos haluat oppia lisää erilaisista argumenteista, joita voit käyttää kyselyissä, suosittelen etsimään WP_Query
koodeksisivua.