Ha WordPress-témákat vagy bővítményeket tervez vagy fejleszt, akkor jó eséllyel valamikor lekérdezést kell készítenie az egyéni metamezőkről. Ezek azok a teljesen egyedi kulcs / érték párok, amelyeket bármilyen bejegyzéshez, oldalhoz vagy egyéni bejegyzés típushoz csatolhat. A WordPress alapértelmezés szerint rendelkezik egy alapvető felhasználói felülettel, vagy valami hasonlót használhat, mint a Speciális egyéni mezők, hogy kedvet kapjon velük. De a motorháztető alatt az ACF szokásos egyedi mezőket használ.
Ez a részlet, amelyet most keres, 1999-ben íródott. Abban az időben ahhoz, hogy lekérdezhessük az egyedi mezőkkel rendelkező bejegyzéseket, a `$ wpdb` globális változót kell használni. Ez felhasználható MySQL lekérdezések létrehozására, amelyeket a WordPress WP_Query () osztály nem támogat. Szerencsére ma a WordPressnek vannak olyan argumentumai, amelyek támogatják az egyéni metamezők lekérdezéseit.
Itt kitérünk arra, hogy különféle mezőkkel (és azok értékeivel) hogyan kérheti és folytathatja a bejegyzéseket. Használhatja ezeket az információkat, függetlenül attól, hogy az WP_Query
osztályt használja query_posts()
, vagy get_posts()
. Mivel query_posts()
és get_posts()
csomagolják az WP_Query
osztályt. Mindannyian ugyanazokat az érveket fogadják el.
A Lekérdezés érvei
Itt van egy alapvető példa egy WordPress lekérdezésre, amely a WordPress Codexből származik.
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();
Ez $args
a fontos darab ott. Különböző érveket fogunk átadni annak érdekében, hogy ez a munka megfeleljen a kívántnak.
Az egyéni meta lekérdezésekor két argumentumcsoportot használhat. Az egyik csoport egy egyszerű egyéni meta mező lekérdezéshez, a másik csoport az összetettebb egyéni meta mezők lekérdezéseihez. Kezdjük az egyszerű csoporttal.
meta_key
Az meta_key
argumentum minden olyan bejegyzést lekérdez, amelyen az egyéni mező meta-azonosítója mentve van az adatbázisba, függetlenül attól, hogy a mezőhöz van-e mentve érték. Ez meta_key
az az azonosító, amelyet megad a metamezőinek. Mint ez:
Ez a példa minden olyan bejegyzést lekérdez, amely rendelkezik az egyedi metamezővel, amelynek azonosítója: „field1”.
$args = array( 'meta_key' => 'field1' );
meta_value
Az meta_value
argumentum olyan lekérdezéseket tesz közzé, amelyek megadják az Ön által megadott értéket. Az meta_value
argumentumot a karakterlánc értékeire használják. Ez a példa minden olyan bejegyzést lekérdez, amelyhez egyedi meta mező tartozik, amelynek értéke „data1”.
$args = array( 'meta_value' => 'data1' );
Kombinálhatja a kettőt is. Ez a példa csak azokat a bejegyzéseket fogja lekérdezni, amelyek rendelkeznek az „meta1” azonosítójú egyéni metamezővel, amelynek értéke „data1”.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
A meta_value_num argumentum hasonló a `meta_value` argumentumhoz. Ahol az meta_value
argumentum a string értékekre vonatkozik, meta_value_num
akkor a numerikus értékekre vonatkozik.
Ez a példa bemutatja, hogyan kell lekérdezni a „field1” egyéni metamezőt, ha annak értéke „10”.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
Az meta_compare
érv pontosan azt csinálja, aminek hangzik. Lehetővé teszi összehasonlítók használatát a "meta_value" és a "meta_value_num" argumentumokkal. A használható összehasonlítók: '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , „KÖZÖTT”, „NEM KÖZÖTT”, „NEM LÉTEZIK”, „REGEXP”, „NEM REGEXP” vagy „RLIKE”. Íme egy példa, amely bemutatja, hogyan lehet lekérdezni olyan bejegyzéseket, amelyek nem rendelkeznek az "data1" értékkel.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Összetettebb lekérdezések
meta_query
A fő érv akkor használja az összetett lekérdezések meta_query
. Ez a saját érv nem tesz semmit. Csak azt mondja a WordPress számára, hogy lekérdezést szeretne készíteni az egyedi metamezőkről. Hozzáad további argumentumokat, meta_query
amelyek felhasználásával meghatározhatja a lekérdezést.
kulcs, érték és összehasonlítás
Az érvek key
, value
pontosan úgy működik, ugyanúgy, mint meta-key
, meta-value
a fent leírtak szerint. A komplex compare
hasonló a compare
fenti egyszerűhöz , de más összehasonlító listát igényel. A komplexum a következőt compare
használja: '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'KÖZÖTT ”,„ NEM KÖZÖTT ”,„ LÉTEZIK ”vagy„ NEM LÉTEZIK ”. value
lehet tömb, de csak akkor, ha az összehasonlítás az „IN”, „NOT IN”, „BETWEEN” vagy „NOT BETWEEN” használatával történik.
Ha az „EXISTS” vagy a „NOT EXISTS” elemet használja compare
, akkor nem kell value
argumentumot megadnia .
Itt van egy példa, amely lekérdezi a bejegyzéseket, ha a „field1” értéke „data1”, és a „field2” értéke nem az „data2”.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
kapcsolat
Az relation
akkor használható, ha az egyéni metaadatokat egy logikai kapcsolat segítségével kívánja lekérdezni. Használhatja a AND
vagy OR
. Például AND
összehasonlítani fogja, hogy az data1 és data2 megfelelnek-e a feltételeknek, és akkor használja, OR
ha az data1 vagy data2 megfelel a feltételeknek.
Ez az érv önálló. Ez azt jelenti, hogy nem jelenik meg az egyéni meta mező egyedi paramétereiben. Nézzünk meg egy példát. Ez a példa csak azokat a bejegyzéseket fogja lekérdezni, amelyek „mező1” értékével „adat1”, és „mező2” értékkel „adat2” értékkel rendelkeznek.
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Ha relation
„OR” -ra váltott . Ezután minden hozzászólást lekérdez, ha a „field1” értéke „data1”, vagy ha a „field2” értéke „data2”.
típus
Az type
argumentum lehetővé teszi, hogy kiválassza a lekérdezendő adatok típusát. Használhatja a „NUMERIC”, a „BINARY”, a „CHAR”, a „DATE”, a „DATETIME”, a „DECIMAL”, a „SIGNED”, a „TIME” vagy a „UNSIGNED” elemeket.
A „DATE” típus csak akkor használható a compare
„BETWEEN” között, ha a dátum formátuma „ÉÉÉÉHHNN”.
Ez a példa minden olyan bejegyzést lekérdez, ahol a „field1” értéke numerikus.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Példa a valós világra
Eddig csak tetszőleges adatokkal és mezőkkel láttam példákat. Most szeretnék bemutatni egy valós példát az egyéni metamezők lekérdezésére.
A forgatókönyv
Létrehozta az események egyéni bejegyzés típusát. Az események utáni típus egy időpontra egyedi mező az ID event_date
. Létre kell hoznia egy lekérdezést, amely megmutatja azokat az eseményeket, amelyek az aktuális dátumon kezdődnek a következő 30 napban.
Az meta_query
argumentumot arra használjuk, hogy az type
argumentummal meghatározzuk az „event_date” mezőt „DATE” adattípusként.
Ez a lekérdezés:
$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 );
Ez value
az aktuális dátum tömbje - 1 nap és 31 nap az aktuális dátumtól számítva. Mivel a „BETWEEN” összehasonlítót használjuk, csak az értéktömb közötti bejegyzések lesznek lekérdezve, ezért egy nappal szeretnénk ellensúlyozni őket.
Ezzel a lekérdezéssel a következő 30 napban bekövetkező eseményeket jeleníti meg.
Következtetés
Az WP_Query
osztály egy nagyon rugalmas osztály, amely lehetővé teszi egyedi lekérdezések sokaságának létrehozását. Ha többet szeretne megtudni a különböző argumentumokról, amelyeket használhat a lekérdezésekhez, javasoljuk, hogy nézze át a WP_Query
kódex oldalt.