Vlastná slučka / dopyt založený na vlastných poliach Triky CSS

Anonim
Naposledy aktualizoval Jason Witt.

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_Querytriedu query_posts(), alebo get_posts(). Vzhľadom k tomu, query_posts()a get_posts()sú obaly pre WP_Querytriedu. 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 $argsto 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_keyArgumentom 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_keyje 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_valueargumenty, ktoré majú vami definovanú hodnotu. meta_valueArgument 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_valueargument určený pre reťazcové hodnoty, meta_value_numznamená 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_compareArgument, 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_queryktoré sa použijú na definovanie dotazu.

kľúč, hodnota a porovnanie

Argumenty key, valuepráce presne rovnakým spôsobom, ako meta-key, meta-valueako je popísané vyššie. Komplex compareje podobný jednoduchému comparevyššie, ale vyžaduje iný zoznam komparátorov. Komplex comparepoužíva '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NIE LIKE', 'IN', 'NOT IN', 'MEDZI ',' NIE MEDZI ',' EXISTUJE 'alebo' NEEXISTUJE '. valuemôž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ť valueargument.

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 relationsa používa, keď chcete dopytovať vlastné meta údaje pomocou logického vzťahu. Môžete použiť ANDalebo OR. Napríklad použijete ANDna porovnanie, či data1 a data2 spĺňajú kritériá, a použijete, ORak 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 relationmožnosť „ALEBO“. Potom by vyhľadalo akékoľvek príspevky, ak má „pole1“ hodnotu „data1“ alebo ak „field2“ má hodnotu „data2“.

typu

typeArgumentá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_queryargument, pretože ním chceme typedefinovať 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 valueje 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_QueryTrieda 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_Querystránku s kódexom.