Ak navrhujete alebo vyvíjate témy alebo doplnky WordPress, je veľká šanca, že jedného dňa budete musieť urobiť dopyt po vlastných meta poliach. Jedná sa o úplne prispôsobené páry kľúč / hodnota, ktoré môžete pripojiť k ľubovoľnému príspevku, stránke alebo typu vlastného príspevku. WordPress má pre nich predvolene základné používateľské rozhranie alebo na ich rozšírenie môžete použiť niečo ako Advanced Custom Fields. Pod kapotou však ACF používa bežné vlastné polia.
Táto veľmi úryvková stránka, na ktorú sa práve pozeráte, bola napísaná v roku 1999. V tom čase, aby ste mohli vyhľadávať príspevky s konkrétnymi vlastnými poľami, musíte použiť globálnu premennú `$ wpdb`. To sa dá použiť na vytváranie dotazov MySQL, ktoré trieda WordPress WP_Query () nepodporuje. Našťastie dnes WordPress obsahuje argumenty, ktoré podporujú dotazy na vlastné meta polia.
Tu sa budeme venovať rôznym spôsobom, ako môžete požadovať a prepínať príspevky pomocou konkrétnych vlastných polí (a ich hodnôt). Tieto informácie budete môcť použiť, či už používate WP_Query
triedu query_posts()
, alebo get_posts()
. Vzhľadom k tomu, query_posts()
a get_posts()
sú obaly pre WP_Query
triedu. Všetci prijímajú rovnaké argumenty.
Argumenty dopytu
Tu je základný príklad dotazu WordPress prevzatého z kódexu WordPress.
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();
Je $args
to dôležitý kúsok. Predložíme rôzne argumenty, aby to fungovalo tak, ako chceme.
Pri dotazovaní na vlastné meta existujú dve „skupiny“ argumentov, ktoré môžete použiť. Jedna skupina slúži na jednoduchý dotaz na vlastné meta pole a druhá skupina na zložitejšie dotazy na vlastné meta polia. Začnime jednoduchou skupinou.
meta_key
meta_key
Argumentom bude pýtať akýkoľvek príspevok, ktorý má vlastné polia metadát ID uložené v databáze, či je alebo nie je hodnota uloží na poli. To meta_key
je ID, ktoré dáte svojim meta poliam. Páči sa ti to:


V tomto príklade bude dopyt na každý príspevok, ktorý má vlastné meta pole, s ID „field1“.
$args = array( 'meta_key' => 'field1' );
meta_value
Príspevok na meta_value
argumenty, ktoré majú vami definovanú hodnotu. meta_value
Argument je použitý pre hodnoty reťazca. Tento príklad bude dopytovať všetky príspevky s vlastným meta poľom, ktoré má hodnotu „data1“.
$args = array( 'meta_value' => 'data1' );
Môžete ich tiež skombinovať. Tento príklad bude vyhľadávať iba príspevky, ktoré majú vlastné meta pole s identifikátorom „field1“, ktorý má hodnotu „data1“.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Argument meta_value_num je podobný argumentu „meta_value“. Pokiaľ je meta_value
argument určený pre reťazcové hodnoty, meta_value_num
znamená to pre číselné hodnoty.
Tento príklad ukazuje, ako vyhľadávať vlastné meta pole „pole1“, ak má hodnotu „10“.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
meta_compare
Argument, robí presne to, čo znie ako. Umožní vám to použiť komparátory s argumentmi `meta_value` a` meta_value_num`. Porovnávače, ktoré môžete použiť, sú '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , „MEDZI“, „NIE MEDZI“, „NEEXISTUJE“, „REGEXP“, „NIE REGEXP“ alebo „RLIKE“. Tu je príklad, ktorý ukazuje, ako vyhľadávať v príspevkoch, ktoré nemajú hodnotu „data1“.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Zložitejšie dotazy
meta_query
Hlavný argument, ktorý použijete pri zložitých dotazoch, je meta_query
. Tento argument sám o sebe nerobí nič. Iba to oznámi WordPress, že chcete vykonať dopyt po vlastných meta poliach. V rámci toho pridáte ďalšie argumenty, meta_query
ktoré sa použijú na definovanie dotazu.
kľúč, hodnota a porovnanie
Argumenty key
, value
práce presne rovnakým spôsobom, ako meta-key
, meta-value
ako je popísané vyššie. Komplex compare
je podobný jednoduchému compare
vyššie, ale vyžaduje iný zoznam komparátorov. Komplex compare
používa '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NIE LIKE', 'IN', 'NOT IN', 'MEDZI ',' NIE MEDZI ',' EXISTUJE 'alebo' NEEXISTUJE '. value
môže byť poľom, ale iba ak porovnanie používa hodnoty „IN“, „NOT IN“, „BETWEEN“ alebo „NOT BETWEEN“.
Ak používate výraz „EXISTUJE“ alebo „NEEXISTUJE“ compare
, nemusíte uvádzať value
argument.
Tu je príklad, ktorý bude dopytovať príspevky, ak má „pole1“ s hodnotou „data1“ a „pole2“ s hodnotou, ktorá nie je „data2“.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
vzťah
Symbol relation
sa používa, keď chcete dopytovať vlastné meta údaje pomocou logického vzťahu. Môžete použiť AND
alebo OR
. Napríklad použijete AND
na porovnanie, či data1 a data2 spĺňajú kritériá, a použijete, OR
ak dáta1 alebo data2 spĺňajú kritériá.
Tento argument je samostatný. To znamená, že sa nezobrazuje v jednotlivých vlastných parametroch meta poľa. Pozrime sa na príklad. Tento príklad bude vyhľadávať iba príspevky, ktoré majú „pole1“ s hodnotou „data1“ a „field2“ s hodnotou „data2“.
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Ak ste zmenili relation
možnosť „ALEBO“. Potom by vyhľadalo akékoľvek príspevky, ak má „pole1“ hodnotu „data1“ alebo ak „field2“ má hodnotu „data2“.
typu
type
Argumentácia umožňuje zvoliť typ dát pre dotaz. Môžete použiť 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME' alebo 'UNSIGNED'.
Typ „DÁTUM“ je možné použiť s compare
„MEDZI“ iba vtedy, ak je formát dátumu „RRRRMMDD“.
Tento príklad vyhľadá akýkoľvek príspevok, ktorého hodnota „poľa1“ je číselná.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Príklad zo skutočného sveta
Zatiaľ som uvádzal iba príklady s ľubovoľnými údajmi a poľami. Teraz by som vám rád ukázal príklad skutočného sveta dotazovania sa na vlastné meta polia.
Scenár
Vytvorili ste vlastný typ príspevku pre udalosti. Typ príspevku udalostí má vlastné pole s dátumom s ID event_date
. Chcete vytvoriť dopyt, ktorý zobrazí všetky udalosti, ktoré sa začnú v aktuálny dátum počas nasledujúcich 30 dní.
Použijeme meta_query
argument, pretože ním chceme type
definovať pole „event_date“ ako dátový typ „DATE“.
Toto je dopyt:
$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 );
The value
je pole aktuálneho dátumu - 1 deň a 31 dní od aktuálneho dátumu. Pretože používame komparátor „MEDZI“, budú sa dopytovať iba príspevky medzi hodnotovým poľom, takže ich chceme kompenzovať o jeden deň.
S týmto dopytom zobrazíte všetky udalosti, ktoré sa vyskytnú počas nasledujúcich 30 dní.
Záver
WP_Query
Trieda je veľmi flexibilný trieda, ktorá vám umožní vytvoriť veľké množstvo užívateľských otázok. Ak sa chcete dozvedieť viac o rôznych argumentoch, ktoré môžete použiť na dotazy, odporúčam vám pozrieť sa na WP_Query
stránku s kódexom.