Č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_Query
predavanje query_posts()
, ali get_posts()
. Ker query_posts()
in get_posts()
so ovoji za WP_Query
razred. 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();
$args
Je 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_key
Argument bo poizvedbo vsako delovno mesto, ki ima visoko meri meta ID shranjeno v bazi podatkov, ali ne obstaja vrednost shranjena v polje. To meta_key
je 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_value
Argument poizvedbe post, ki imajo vrednost, ki jo določite. meta_value
Argument 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_value
argument ment za nizne vrednosti, meta_value_num
je 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_compare
Argument 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_query
ki bodo uporabljeni za določanje poizvedbe.
ključ, vrednost in primerjavo
Argumenti key
, value
delo na povsem enak način, kot je meta-key
, meta-value
kot je opisano zgoraj. Kompleks compare
je podoben preprostemu compare
zgoraj, vendar ima drug primerjalni seznam. Kompleks compare
uporablja '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NE MED ',' OBSTAJA 'ali' NE OBSTAJA '. value
je 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 value
argumenta.
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 relation
se, kadar želite poizvesti metapodatke po meri z uporabo logičnega razmerja. Lahko uporabite AND
oz OR
. Na primer, AND
primerjali 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 relation
v "ALI". Nato bi poizvedoval o vseh objavah, če ima „field1“ vrednost „data1“ ali če „field2“ ima vrednost „data2“.
tip
type
Argument, 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_query
Argument bomo uporabili , saj želimo uporabiti type
argument 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 value
niz 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_Query
Razred 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_Query
stran kodeksa.