Pokud navrhujete nebo vyvíjíte motivy nebo doplňky WordPress, je velká šance, že jednoho dne budete muset vytvořit dotaz na vlastní meta pole. Jedná se o zcela vlastní páry klíč / hodnota, které můžete připojit k jakémukoli příspěvku, stránce nebo vlastnímu typu příspěvku. WordPress pro ně má ve výchozím nastavení základní uživatelské rozhraní, nebo můžete použít něco jako Advanced Custom Fields, abyste si s nimi udělali představu. Ale pod kapotou ACF používá běžná vlastní pole.
Tato velmi úryvková stránka, na kterou se právě díváte, byla napsána v roce 1999. V té době, abyste mohli vyhledávat příspěvky s konkrétními vlastními poli, budete muset použít globální proměnnou `$ wpdb`. To lze použít k vytváření dotazů MySQL, které třída WordPress WP_Query () nepodporuje. Naštěstí dnes WordPress obsahuje argumenty, které podporují dotazy na vlastní meta pole.
Zde se budeme zabývat různými způsoby, jak můžete požadovat a procházet příspěvky pomocí konkrétních vlastních polí (a jejich hodnot). Tyto informace budete moci použít, ať už používáte WP_Query
třídu query_posts()
, nebo get_posts()
. Vzhledem k tomu, query_posts()
a get_posts()
jsou obaly pro WP_Query
třídu. Všichni přijímají stejné argumenty.
Argumenty dotazu
Zde je základní příklad dotazu WordPress převzatého z kodexu 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();
To $args
je důležitý kousek. Předáme různé argumenty, aby to fungovalo tak, jak chceme.
Při dotazování na vlastní meta existují dvě „skupiny“ argumentů, které můžete použít. Jedna skupina je pro jednoduchý dotaz na vlastní meta pole a druhá skupina pro složitější dotazy na vlastní meta pole. Začněme jednoduchou skupinou.
meta_key
meta_key
Argumentem bude dotazovat jakýkoliv příspěvek, který má vlastní pole metadat ID uložené v databázi, zda je či není hodnota uloží na poli. To meta_key
je ID, které dáte svým meta polím. Takhle:
V tomto příkladu bude dotaz na každý příspěvek, který má vlastní meta pole, s ID „field1“.
$args = array( 'meta_key' => 'field1' );
meta_value
Příspěvek meta_value
dotazů na argumenty, který má vámi definovanou hodnotu. meta_value
Argument je použit pro hodnoty řetězce. Tento příklad bude dotazovat všechny příspěvky s vlastním meta polem, které má hodnotu „data1“.
$args = array( 'meta_value' => 'data1' );
Můžete je také kombinovat. Tento příklad bude vyhledávat pouze příspěvky, které mají vlastní meta pole s ID „pole1“, které má hodnotu „data1“.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Argument meta_value_num je podobný argumentu `meta_value_num. Tam, kde je meta_value
argument určen pro řetězcové hodnoty, meta_value_num
je míněn pro číselné hodnoty.
Tento příklad ukazuje, jak dotazovat vlastní meta pole „field1“, pokud má hodnotu „10“.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
meta_compare
Argument, dělá přesně to, co zní jako. Umožní vám použít komparátory s argumenty `meta_value` a` meta_value_num`. Můžete použít komparátory '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , „MEZI“, „NE MEZI“, „NEEXISTUJE“, „REGEXP“, „NE REGEXP“ nebo „RLIKE“. Zde je příklad, který ukazuje, jak vyhledávat příspěvky, které nemají hodnotu „data1“.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Složitější dotazy
meta_query
Hlavní argument, který použijete pro složité dotazy, je meta_query
. Tento argument sám o sobě nedělá nic. Prostě řekne WordPressu, že chcete provést dotaz na vlastní meta pole. V rámci toho přidáte další argumenty, meta_query
které budou použity k definování dotazu.
klíč, hodnota a porovnání
Argumenty key
, value
práce přesně stejným způsobem, jako meta-key
, meta-value
jak je popsáno výše. Komplex compare
je podobný jednoduchému compare
výše, ale vyžaduje jiný seznam komparátorů. Komplex compare
používá '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'MEZI „,„ NE MEZI “,„ EXISTUJE “nebo„ NEEXISTUJE “. value
může být pole, ale pouze když porovnávání používá 'IN', 'NOT IN', 'BETWEEN' nebo 'NOT BETWEEN'.
Pokud používáte „EXISTUJE“ nebo „NEEXISTUJE“ s compare
, nemusíte zadávat value
argument.
Zde je příklad, který bude dotazovat příspěvky, pokud má „pole1“ s hodnotou „data1“ a „pole2“ s hodnotou, která není „data2“.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
vztah
The relation
se používá, když chcete dotazovat vlastní meta data pomocí logického vztahu. Můžete použít AND
nebo OR
. Například použijete AND
k porovnání, zda data1 a data2 splňují kritéria, a použijete, OR
pokud data1 nebo data2 splňují kritéria.
Tento argument je samostatný. To znamená, že se neobjeví v jednotlivých vlastních parametrech meta pole. Podívejme se na příklad. Tento příklad bude vyhledávat pouze příspěvky, které mají „pole1“ s hodnotou „data1“ a „pole2“ s hodnotou „data2“.
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Pokud jste změnili relation
na „NEBO“. Pak by dotazovalo všechny příspěvky, pokud má „pole1“ hodnotu „data1“ nebo pokud „pole2“ má hodnotu „data2“.
typ
type
Argumentace umožňuje zvolit typ dat pro dotaz. Můžete použít „NUMERIC“, „BINARY“, „CHAR“, „DATE“, „DATETIME“, „DECIMAL“, „SIGNED“, „TIME“ nebo „UNSIGNED“.
Typ „DATUM“ lze použít s compare
„MEZI“ pouze v případě, že formát data je „RRRRMMDD“.
V tomto příkladu bude dotaz na jakýkoli příspěvek, jehož hodnota „pole1“ je číselná.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Příklad ze skutečného světa
Zatím jsem uvedl pouze příklady s libovolnými daty a poli. Nyní bych vám rád ukázal příklad skutečného světa dotazování na vlastní meta pole.
Scénář
Vytvořili jste vlastní typ příspěvku události. Typ příspěvku události má vlastní pole s datem s ID event_date
. Chcete vytvořit dotaz, který zobrazí všechny události, které začnou v aktuálním datu během následujících 30 dnů.
Použijeme meta_query
argument, protože chceme type
argumentem definovat pole „event_date“ jako datový typ „DATE“.
Toto je dotaz:
$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álního data - 1 den a 31 dní od aktuálního data. Protože používáme komparátor „MEZI“, budou dotazovány pouze příspěvky mezi hodnotovým polem, takže je chceme kompenzovat o jeden den.
S tímto dotazem zobrazíte všechny události, ke kterým dojde v příštích 30 dnech.
Závěr
WP_Query
Třída je velmi flexibilní třída, která vám umožní vytvořit velké množství uživatelských dotazů. Pokud se chcete dozvědět více o různých argumentech, které můžete použít pro dotazy, doporučuji prohlédnout si WP_Query
stránku codex.