Egyéni hurok / lekérdezés az egyéni mezők alapján - CSS-trükkök

Anonim
Utolsó frissítés: Jason Witt.

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_Queryosztályt használja query_posts(), vagy get_posts(). Mivel query_posts()és get_posts()csomagolják az WP_Queryosztá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 $argsa 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_keyargumentum 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_keyaz 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_valueargumentum olyan lekérdezéseket tesz közzé, amelyek megadják az Ön által megadott értéket. Az meta_valueargumentumot 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_valueargumentum a string értékekre vonatkozik, meta_value_numakkor 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_queryamelyek felhasználásával meghatározhatja a lekérdezést.

kulcs, érték és összehasonlítás

Az érvek key, valuepontosan úgy működik, ugyanúgy, mint meta-key, meta-valuea fent leírtak szerint. A komplex comparehasonló a comparefenti egyszerűhöz , de más összehasonlító listát igényel. A komplexum a következőt comparehasználja: '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'KÖZÖTT ”,„ NEM KÖZÖTT ”,„ LÉTEZIK ”vagy„ NEM LÉTEZIK ”. valuelehet 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 valueargumentumot 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 relationakkor használható, ha az egyéni metaadatokat egy logikai kapcsolat segítségével kívánja lekérdezni. Használhatja a ANDvagy OR. Például ANDösszehasonlítani fogja, hogy az data1 és data2 megfelelnek-e a feltételeknek, és akkor használja, ORha 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 typeargumentum 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_queryargumentumot arra használjuk, hogy az typeargumentummal 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 valueaz 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_Queryosztá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_Querykódex oldalt.