Mukautettu silmukka / kysely mukautettujen kenttien perusteella - CSS-temppuja

Anonim
Viimeksi päivittänyt Jason Witt.

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_Queryluokkaa query_posts()tai get_posts(). Koska query_posts()ja get_posts()ovat WP_Queryluokan 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 $argson 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_keyArgumentti kyselyn tointa, jolla on muokattu kenttä meta tunnus tallennetaan tietokantaan, vai ei on arvo tallennetaan kenttään. Tämä meta_keyon 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_valueVäite kyselyt postitse, joiden arvo määritellään. meta_valueArgumentti 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_valueargumentti on merkkijonoarvoille, se meta_value_numon 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_compareArgumentti 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_queryjoita käytetään kyselyn määrittelemiseen.

avain, arvo ja vertailu

Argumentit key, valuetoimivat täsmälleen samalla tavalla kuin meta-key, meta-valuekuten edellä on kuvattu. Kompleksi compareon samanlainen kuin yllä oleva yksinkertainen compare, mutta siihen tarvitaan erilainen luettelo vertailijoista. Kompleksi comparekäyttää '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN "," EI VÄLILLÄ "," OLEMASSA "tai" EI OLEMASSA ". valuevoi 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ää valueargumenttia.

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ä relationkäytetään, kun haluat kysyä mukautettuja metatietoja loogisen suhteen avulla. Voit käyttää ANDtai OR. Esimerkiksi ANDvertaillaan, täyttävätkö data1 ja data2 kriteerit, ja sitä, ORjos 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 relationtilaan “OR”. Sitten se kysyisi viestejä, jos kentän1 arvo on "data1" tai jos kentän2 arvo "data2".

tyyppi

typeArgumentilla 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_queryargumenttia, koska haluamme käyttää typeargumenttia 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ä valueon 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_QueryLuokka 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_Querykoodeksisivua.