Tinkinta ciklas / užklausa, pagrįsta pasirinktais laukais CSS-gudrybės

Anonim
Paskutinį kartą atnaujino Jasonas Wittas.

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_Queryklasė, query_posts()arba get_posts(). Nuo query_posts()ir get_posts()yra WP_Queryklasė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 $argsyra 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_keyArgumentas 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_keyyra 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_valueArgumentas užklausų postą, kurie turi vertę, kurią apibrėžti. meta_valueArgumentas 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_valueargumentas nurodomas eilutės reikšmėms, meta_value_numtai 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_compareArgumentas 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_querykurie bus naudojami užklausai apibrėžti.

raktas, vertė ir palyginimas

Argumentai key, valuedarbas lygiai taip pat, kaip meta-key, meta-valuekaip aprašyta aukščiau. Kompleksas compareyra panašus į compareaukščiau pateiktą paprastą , tačiau jam reikia kito palyginamųjų sąrašo. Komplekse comparenaudojami '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'STARP “,„ NE TARP “,„ ESA “arba„ NĖRA “. valuegali būti masyvas, bet tik tada, kai palyginimas naudoja „IN“, „NOT IN“, „BETWEEN“ arba „NOT BETWEEN“.

Jei naudojate „EXISTS“ arba „NOT EXISTS“ compare, valueargumento 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 relationnaudojama, kai norite pateikti užklausą apie pasirinktinius metaduomenis naudodami loginį ryšį. Galite naudoti ANDarba OR. Pavyzdžiui, naudosite AND, jei norite palyginti, ar data1 ir data2 atitinka kriterijus, o ORjei 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

typeArgumentas 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_queryArgumentą naudosime, nes norime typeapibrėž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 valueyra 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_QueryKlasė 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_Querykodekso puslapį.