Jei kuriate ar plėtojate „WordPress“ temas ar papildinius, yra didelė tikimybė, kad kada nors turėsite pateikti užklausą dėl pasirinktų meta laukų. Tai yra visiškai pritaikytos raktų / reikšmių poros, kurias galite pridėti prie bet kokio įrašo, puslapio ar pasirinktinio įrašo tipo. Pagal numatytuosius nustatymus „WordPress“ turi pagrindinę vartotojo sąsają arba galite naudoti kažką panašaus į Išplėstinius pasirinktinius laukus, kad galėtumėte su jais susigundyti. Bet po gaubtu ACF naudoja įprastus įprastus laukus.
Šis fragmentas, kurį dabar žiūrite, buvo parašytas 1999 m. Tuo metu, norint pateikti užklausą dėl įrašų su tam tikrais pasirinktais laukais, jums reikės naudoti visuotinį kintamąjį `$ wpdb`. Tai gali būti naudojama kuriant „MySQL“ užklausas, kurių „WordPress WP_Query ()“ klasė nepalaiko. Laimei, šiandien „WordPress“ turi argumentų, kurie palaiko tinkintų meta laukų užklausas.
Čia aptarsime įvairius būdus, kaip galite pateikti užklausą ir atnaujinti įrašus su tam tikrais pasirinktiniais laukais (ir jų vertėmis). Galėsite naudoti šią informaciją, ar jūs naudojate WP_Query
klasė, query_posts()
arba get_posts()
. Nuo query_posts()
ir get_posts()
yra WP_Query
klasės įvyniotojai . Jie visi sutinka su tais pačiais argumentais.
Užklausos argumentai
Čia yra pagrindinis „WordPress“ užklausos pavyzdys, paimtas iš „WordPress Codex“.
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();
Tai $args
yra svarbus dalykas ten. Pateiksime įvairius argumentus, kad šis darbas būtų toks, kokio norime.
Pateikdami užklausą dėl pasirinktinio meta, galite naudoti dvi argumentų „grupes“. Viena grupė skirta paprastai pasirinktinio meta lauko užklausai, kita grupė - sudėtingesnėms pasirinktinių meta laukų užklausoms. Pradėkime nuo paprastos grupės.
meta_key
meta_key
Argumentas bus užklausą jokios postą, kad turi užsakymą lauko meta ID išsaugomi duomenų bazėje, ar yra vertės išsaugoti srityje. Tai meta_key
yra ID, kurį suteikiate savo meta laukams. Kaip šitas:
Šiame pavyzdyje bus pateikiama užklausa apie bet kurį įrašą, kuriame yra pasirinktas meta laukas, kurio ID yra „field1“.
$args = array( 'meta_key' => 'field1' );
meta_value
meta_value
Argumentas užklausų postą, kurie turi vertę, kurią apibrėžti. meta_value
Argumentas naudojamas styginių vertybes. Šis pavyzdys pateiks užklausą apie bet kuriuos įrašus su pasirinktiniu meta lauku, kurio vertė yra „data1“.
$args = array( 'meta_value' => 'data1' );
Taip pat galite sujungti abu. Šiame pavyzdyje bus pateikiamos užklausos tik tiems įrašams, kurie turi pasirinktinį meta lauką su ID „laukas1“, kurio vertė yra „duomenys1“.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Meta_value_num argumentas yra panašus į argumentą `meta_value`. Jei meta_value
argumentas nurodomas eilutės reikšmėms, meta_value_num
tai reiškia skaitines reikšmes.
Šis pavyzdys rodo, kaip pateikti užklausą „custom1“ lauke, jei jo vertė yra „10“.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_palyginti
meta_compare
Argumentas daro būtent tai, ką jis skamba kaip. Tai leis jums naudoti palyginamuosius elementus su „meta_value“ ir „meta_value_num“ argumentais. Palyginamieji elementai, kuriuos galite naudoti, yra '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , „TARP“, „NE TARP“, „NĖRA“, „REGEXP“, „NE REGEXP“ arba „PATINK“. Štai pavyzdys, parodantis, kaip pateikti užklausą dėl įrašų, kurių vertė nėra „data1“.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Sudėtingesnės užklausos
meta_query
Pagrindinis argumentas, kurį naudosite vykdydami sudėtingas užklausas, yra meta_query
. Šis atskiras argumentas nieko nedaro. Tai tiesiog nurodo „WordPress“, kad norite pateikti pasirinktinių meta laukų užklausą. Pridėsite papildomų argumentų, meta_query
kurie bus naudojami užklausai apibrėžti.
raktas, vertė ir palyginimas
Argumentai key
, value
darbas lygiai taip pat, kaip meta-key
, meta-value
kaip aprašyta aukščiau. Kompleksas compare
yra panašus į compare
aukščiau pateiktą paprastą , tačiau jam reikia kito palyginamųjų sąrašo. Komplekse compare
naudojami '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'STARP “,„ NE TARP “,„ ESA “arba„ NĖRA “. value
gali būti masyvas, bet tik tada, kai palyginimas naudoja „IN“, „NOT IN“, „BETWEEN“ arba „NOT BETWEEN“.
Jei naudojate „EXISTS“ arba „NOT EXISTS“ compare
, value
argumento nurodyti nereikia .
Čia pateikiamas pavyzdys, kuris pateiks užklausas dėl įrašų, jei jame yra „laukas1“ su reikšme „duomenys1“, o „laukas2“ - su verte, kuri nėra „duomenys2“.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
santykis
Tai relation
naudojama, kai norite pateikti užklausą apie pasirinktinius metaduomenis naudodami loginį ryšį. Galite naudoti AND
arba OR
. Pavyzdžiui, naudosite AND
, jei norite palyginti, ar data1 ir data2 atitinka kriterijus, o OR
jei duomenys1 arba data2 atitinka kriterijus.
Šis argumentas yra atskiras. Tai reiškia, kad jis nerodomas atskiruose pasirinktiniuose meta lauko parametruose. Pažvelkime į pavyzdį. Šis pavyzdys pateiks užklausą tik tiems įrašams, kurių „laukas1“ yra „duomenų1“ reikšmė ir „laukas2“ su „duomenų2“ verte.
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Jei pakeitėte relation
į „ARBA“. Tada ji teiks užklausą apie bet kokius įrašus, jei „laukas1“ turi reikšmę „duomenys1“ arba „laukas2“ turi reikšmę „duomenys2“.
tipo
type
Argumentas leidžia jums pasirinkti duomenų tipą užklausą. Galite naudoti „NUMERIC“, „BINARY“, „CHAR“, „DATE“, „DATETIME“, „DECIMAL“, „SIGNED“, „TIME“ arba „UNSIGNED“.
„DATE“ tipą galima naudoti su compare
„BETWEEN“ tik tuo atveju, jei datos formatas yra „YYYYMMDD“.
Šiame pavyzdyje bus pateikiama užklausa apie bet kurį įrašą, kuriame „field1“ reikšmė yra skaitinė.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Tikro pasaulio pavyzdys
Iki šiol pateikiau tik pavyzdžius su savavališkais duomenimis ir laukais. Dabar norėčiau parodyti jums realų pavyzdį, kaip pateikti užklausas pagal pasirinktinius meta laukus.
Scenarijus
Sukūrėte pasirinktinį įvykių įrašo tipą. Įvykių įrašo tipe yra datos pasirinktinis laukas su ID event_date
. Norite sukurti užklausą, kurioje bus rodomi visi įvykiai, kurie prasidės dabartinę datą per kitas 30 dienų.
meta_query
Argumentą naudosime, nes norime type
apibrėžti lauką „įvykio_data“ kaip „DATA“ duomenų tipą.
Tai yra užklausa:
$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 );
Tai value
yra dabartinės datos masyvas - 1 diena ir 31 diena nuo dabartinės datos. Kadangi mes naudojame palyginimą „TARP“, bus klausiami tik įrašai tarp vertės masyvo, todėl norime juos kompensuoti viena diena.
Su šia užklausa parodysite bet kokį įvykį, įvykusį per kitas 30 dienų.
Išvada
WP_Query
Klasė yra labai lanksti klasė, kuri leis jums sukurti pagal užsakymą užklausų gausybę. Jei norite sužinoti daugiau apie įvairius argumentus, kuriuos galite naudoti užklausoms, rekomenduoju peržiūrėti WP_Query
kodekso puslapį.