Vlastní smyčka / dotaz na základě vlastních polí Triky CSS

Anonim
Poslední aktualizaci provedl Jason Witt.

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_Querytřídu query_posts(), nebo get_posts(). Vzhledem k tomu, query_posts()a get_posts()jsou obaly pro WP_Querytří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 $argsje 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_keyArgumentem 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_keyje 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_valuedotazů na argumenty, který má vámi definovanou hodnotu. meta_valueArgument 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_valueargument určen pro řetězcové hodnoty, meta_value_numje 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_compareArgument, 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_querykteré budou použity k definování dotazu.

klíč, hodnota a porovnání

Argumenty key, valuepráce přesně stejným způsobem, jako meta-key, meta-valuejak je popsáno výše. Komplex compareje podobný jednoduchému comparevýše, ale vyžaduje jiný seznam komparátorů. Komplex comparepoužívá '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'MEZI „,„ NE MEZI “,„ EXISTUJE “nebo„ NEEXISTUJE “. valuemůž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 valueargument.

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 relationse používá, když chcete dotazovat vlastní meta data pomocí logického vztahu. Můžete použít ANDnebo OR. Například použijete ANDk porovnání, zda data1 a data2 splňují kritéria, a použijete, ORpokud 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 relationna „NEBO“. Pak by dotazovalo všechny příspěvky, pokud má „pole1“ hodnotu „data1“ nebo pokud „pole2“ má hodnotu „data2“.

typ

typeArgumentace 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_queryargument, protože chceme typeargumentem 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 valueje 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_QueryTří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_Querystránku codex.