Loop / poizvedba po meri na podlagi polj po meri - CSS-triki

Anonim
Nazadnje posodobil Jason Witt.

Če načrtujete ali razvijate teme ali vtičnike WordPress, obstaja velika verjetnost, da boste nekega dne morali povprašati po metapoljih po meri. To so tisti pari po meri ključ / vrednost, ki jih lahko priložite kateri koli objavi, strani ali vrsti objave po meri. WordPress ima privzeto osnovni uporabniški vmesnik zanje, lahko pa uporabite nekaj takega kot Napredna polja po meri, če želite biti zanje všeč. Toda pod pokrovom ACF uporablja običajna stara polja po meri.

Ta zelo delna stran, ki jo trenutno gledate, je bila napisana leta 1999. Takrat bi morali za poizvedbe po objavah s posebnimi polji uporabiti globalno spremenljivko `$ wpdb`. To se lahko uporablja za ustvarjanje poizvedb MySQL, ki jih razred WordPress WP_Query () ne podpira. Na srečo ima WordPress danes argumente, ki podpirajo poizvedbe za meta polja.

Tu bomo obravnavali različne načine, kako lahko zahtevate objave in jih obkrožite z določenimi polji po meri (in njihovimi vrednostmi). Te podatke boste lahko uporabili ne glede na to, ali uporabljate WP_Querypredavanje query_posts(), ali get_posts(). Ker query_posts()in get_posts()so ovoji za WP_Queryrazred. Vsi sprejemajo enake argumente.

Argumenti poizvedbe

Tu je osnovni primer poizvedbe WordPress, vzete iz 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();

$argsJe pomembno, malo tam. Posredovali bomo različne argumente, da bo to delovalo tako, kot želimo.

Pri poizvedovanju za meta po meri lahko uporabite dve "skupini" argumentov. Ena skupina je namenjena preprostim poizvedbam po metapoljih po meri, druga skupina pa za bolj zapletene poizvedbe po metapoljih po meri. Začnimo s preprosto skupino.

meta_key

meta_keyArgument bo poizvedbo vsako delovno mesto, ki ima visoko meri meta ID shranjeno v bazi podatkov, ali ne obstaja vrednost shranjena v polje. To meta_keyje ID, ki ga daste svojim metapoljem. Všečkaj to:

Ta primer bo poizvedel katero koli objavo z metapoljem po meri z ID-jem "field1".

$args = array( 'meta_key' => 'field1' );

meta_value

meta_valueArgument poizvedbe post, ki imajo vrednost, ki jo določite. meta_valueArgument se uporablja za niz vrednot. Ta primer bo poizvedel za vse objave z metapoljem po meri, ki ima vrednost »data1«.

$args = array( 'meta_value' => 'data1' );

Oboje lahko tudi kombinirate. Ta primer bo poizvedoval samo po objavah, ki imajo metapolje po meri z ID-jem "field1", ki ima vrednost "data1".

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );

meta_value_num

Argument meta_value_num je podoben argumentu "meta_value". Kjer je meta_valueargument ment za nizne vrednosti, meta_value_numje mišljen za numerične vrednosti.

Ta primer prikazuje, kako poizvedovati po metapolju po meri »field1«, če ima vrednost »10«.

$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );

meta_primerjaj

meta_compareArgument počne točno to, kar sliši. Omogočila vam bo uporabo primerjalnikov z argumentoma `meta_value` in` meta_value_num`. Primerjalniki, ki jih lahko uporabite, so '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'MED', 'NE MED', 'NE OBSTAJA', 'REGEXP', 'NOT REGEXP' ali 'RLIKE'. Tu je primer, ki prikazuje, kako poizvedovati v vseh objavah, ki nimajo vrednosti "data1".

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );

Bolj zapletene poizvedbe

meta_poizvedba

Glavni argument, ki ga boste uporabili za zapletene poizvedbe, je meta_query. Ta argument sam po sebi ne naredi ničesar. WordPressu samo pove, da želite povprašati po metapoljih po meri. Znotraj boste dodali dodatne argumente, meta_queryki bodo uporabljeni za določanje poizvedbe.

ključ, vrednost in primerjavo

Argumenti key, valuedelo na povsem enak način, kot je meta-key, meta-valuekot je opisano zgoraj. Kompleks compareje podoben preprostemu comparezgoraj, vendar ima drug primerjalni seznam. Kompleks compareuporablja '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NE MED ',' OBSTAJA 'ali' NE OBSTAJA '. valueje lahko matrika, vendar le, če primerjate z uporabo 'IN', 'NOT IN', 'BETWEEN' ali 'NOT BETWEEN'.

Če uporabljate 'EXISTS' ali 'NOT EXISTS' z compare, vam ni treba navesti valueargumenta.

Tu je primer, ki bo poizvedoval po objavah, če ima "polje1" z vrednostjo "data1" in "field2" z vrednostjo, ki ni "data2".

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );

razmerje

Uporablja relationse, kadar želite poizvesti metapodatke po meri z uporabo logičnega razmerja. Lahko uporabite ANDoz OR. Na primer, ANDprimerjali boste, če podatki1 in podatki2 izpolnjujejo merila, in uporabite, ORče podatki1 ali podatki2 izpolnjujejo merila.

Ta argument je samostojen. To pomeni, da se ne pojavi v posameznih parametrih meta polja po meri. Oglejmo si primer. Ta primer bo poizvedoval samo za objave, ki imajo »polje1« z vrednostjo »podatki1« in »polje2« z vrednostjo »podatki2«.

$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );

Če ste spremenili relationv "ALI". Nato bi poizvedoval o vseh objavah, če ima „field1“ vrednost „data1“ ali če „field2“ ima vrednost „data2“.

tip

typeArgument, vam omogoča, da izberete vrsto podatkov za poizvedbo. Uporabite lahko 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME' ali 'UNSIGNED'.

Tip „DATUM“ je mogoče uporabiti z compare„MEDMEJ“ le, če je oblika datuma „LLLLMMDD“.

Ta primer bo poizvedel katero koli objavo, kjer je vrednost "polje1" številčna.

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );

Primer iz resničnega sveta

Do zdaj sem navedel samo primere s poljubnimi podatki in polji. Zdaj bi vam rad prikazal resnični primer poizvedovanja po metapoljih po meri.

Scenarij

Ustvarili ste vrsto objave po meri. Vrsta objave dogodkov ima polje po meri z ID-jem event_date. Ustvariti želite poizvedbo, ki bo prikazala vse dogodke, ki se bodo začeli na trenutni datum v naslednjih 30 dneh.

meta_queryArgument bomo uporabili , saj želimo uporabiti typeargument za definiranje polja »datum_datuma« kot podatkovnega tipa »DATUM«.

To je poizvedba:

$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 );

Je valueniz trenutnega datuma - 1 dan in 31 dni od trenutnega datuma. Ker uporabljamo primerjalnik "MED", se bodo poizvedovale le objave med matriko vrednosti, zato jih želimo nadomestiti za en dan.

S to poizvedbo boste prikazali vse dogodke, ki se bodo zgodili v naslednjih 30 dneh.

Zaključek

WP_QueryRazred je zelo prilagodljiva razreda, ki vam bo omogočilo, da ustvarite množico meri poizvedb. Če želite izvedeti več o različnih argumentih, ki jih lahko uporabite za poizvedbe, priporočam, da si ogledate WP_Querystran kodeksa.