Zde je návod, jak získat pomocí WP_Query libovolný příspěvek

Zde je návod, jak získat pomocí WP_Query libovolný příspěvek

Zde je návod, jak získat pomocí WP_Query libovolný příspěvek
СОДЕРЖАНИЕ
02 июня 2020

Pokud jste si v minulosti vytvořili jednoduchá témata, je pravděpodobné, že budete muset získávat příspěvky sami. Nakonec WordPress načte posledních 10 příspěvků na hlavní stránku a správné příspěvky na archivních stránkách. A co složitější scénáře? Co kdybyste chtěli sitemap druhů a chcete uvést všechny své příspěvky a stránky seřazené podle data?


WP_Query je váš přítel, umožňuje vám stahovat příspěvky z databáze podle vašich kritérií. Všechny příspěvky můžete načíst z jedné kategorie, která také obsahuje určité značky. Můžete načíst všechny stránky vytvořené minulý rok a příspěvky, které nemají doporučený obrázek.

V tomto příspěvku vám podrobně prozkoumám, jak funguje WP_Query – začněme!

Vlastní smyčka

Klíčem k dobré práci s vlastními dotazy je zvládnutí argumentů, které jim můžete předat. Než se na to podíváme, vytvořme rychle "kostra" můžeme použít k výpisu příspěvků. Smyčka na pravidelné archivní stránce by vypadala asi takto:

<?php if (have_posts ()): ?>
<?php while (have_posts ()): the_post () ?>

<?php nakonec ?>
<?php jinde: ?>

<?php endif ?>

Funguje to dobře, protože před načtením stránky již WordPress našel správné příspěvky. Když píšeme vlastní dotaz, budeme potřebovat vlastní smyčku. Kód je velmi podobný:

<?php
$ args = array (
‘post_type’ => ‘pošta’,
‘post_status’ => ‘budoucnost’
);
$ naplánováno = nové WP_Query ($ args);

pokud ($ naplánováno->have_posts ()):
?>
<?php while ($ naplánováno->have_posts ()): $ naplánováno->pošta() ?>

<?php nakonec ?>
<?php jinde: ?>

<?php endif ?>

Vytváříme nový dotaz WordPress pomocí třídy WP_Query a předáním jeho parametrů určíme typy příspěvků, které potřebujeme. Pak zavoláme metody have_posts () a the_post () na našem $ naplánovaném objektu.

Pokud jste v objektově orientovaném programování nováčkem a nechápete proč, nebojte se, stále můžete snadno používat vlastní dotazy. Zaměříme se na pole $ args v celém příspěvku, což bude docela jednoduché.

Jednoduché argumenty

Jak jsem zmínil, hlavní "soubor znalostí" pokud jde o WP_Query, spočívá v jejích argumentech. Kodex seznamy všech, podíváme se na ty nejužitečnější zde.

Některé argumenty jsou velmi jednoduché, například parametr tag nebo tag_id. První z nich vezme značku slug, později ID značky. Můžete také oddělit více položek čárkami nebo použít záporná ID pro označení, že chcete načíst příspěvky, které tak dělají ne mít tuto konkrétní značku připojenou.

$ args = array (
‘post_type’ => ‘pošta’,
‘tag_id’ => ’22, 92,44, -21′
);
$ our_posts = new WP_Query ($ args);

Úryvek načte články, které k nim jsou připojeny některé z prvních tří značek, nikoli však čtvrté. I když je tento systém dostatečně výkonný pro jednoduché potřeby, obvykle používám mnohem flexibilnější taxonomický dotaz, o kterém budu hovořit o něco později.

Příkladem některých jednodušších polí jsou autor, jméno autora, kočka, název kategorie, s (pro vyhledávací dotazy), post_status, post_type. Některá pole, například post_status, vyžadují, abyste předali řadu stavů, pokud chcete použít více hodnot.

$ args = array (
‘post_type’ => pole (‘post’, ‘page’),
‘post_status’ => pole (‘koncept’, ‘publikovat’),
‘kočka’ => ‘hudební videa’
);
$ our_posts = new WP_Query ($ args);

Výše uvedený příklad načte všechny příspěvky, které jsou buď stránky, příspěvky; jsou publikovány nebo ve stavu konceptu a je jim přiřazena kategorie hudby nebo videa. To by mohlo být použito pro zobrazení titulků jakéhokoli aktuálního nebo plánovaného obsahu souvisejícího s hudbou nebo videem.

Taxonomie dotazy

Pro jednoduché věci stačí použít uvedené argumenty k načtení příspěvků na základě kategorií nebo značek, ale co když máte vlastní taxonomii nebo potřebujete kombinovat více parametrů? Odpověď spočívá v argumentu tax_query, který je sám o sobě maticí. Podívejme se nejprve na příklad.

$ args = array (
‘post_type’ => ‘rezervovat’,
‘tax_query’ => pole (
pole (
‘taxonomie’ => ‘žánr’,
‘field’ => ‘slimák’,
‘terms’ => pole (‘scifi’, ‘thriller’),
‘operátor’ => ‘NE V’,
),
pole (
‘taxonomie’ => ‘autor’,
‘field’ => ‘id’,
‘terms’ => pole (92, 883, 399),
),
‘vztah’ => ‘A’,
),
);
$ query = new WP_Query ($ args);

Zde načítáme některé příspěvky z našeho typu příspěvku „kniha“ a přidáváme některé parametry taxonomie. Pomocí dvou polí definovaných v tax_query jsme určili, že chceme vytáhnout knihy napsané autorem 92, 883 nebo 399, které jsou ne v žánru sci-fi nebo thriller. Parametr relace definuje vztah mezi oběma poli. V našem případě jde o vztahy typu „a“, což znamená, že musí být splněny obě podmínky.

Pokud bychom použili ‘nebo we, získali bychom knihy, které buď nejsou v kategorii sci-fi nebo thriller, nebo jsou napsány uvedenými třemi autory. V prosté angličtině to znamená: Chci vidět všechny své knihy kromě žánru sci-fi a thriller. Chci však vidět všechny knihy od Terryho Pratchetta, Douglase Adamse a Stephena Kinga, bez ohledu na žánr.

Meta dotazy

Meta dotazy jsou velmi podobné taxonomickým dotazům ve struktuře, ale k filtrování příspěvků používají data z tabulky metadat. Níže uvedený kód zobrazí všechny publikované příspěvky, které mají doporučený obrázek.

$ args = array (
‘post_type’ => ‘pošta’,
‘meta_query’ => pole (
pole (
‘key’ => ‘_thumbnail_id’,
‘value’ => ”,
‘porovnání’ => ‘! =’,
),
),
);
$ query = new WP_Query ($ args);

WordPress ukládá ID doporučeného obrázku pro příspěvek pomocí pole _thumbnail_id. Pokud tedy načteme všechny příspěvky, u kterých tato hodnota meta není prázdná, měli bychom skončit u všech příspěvků, které mají doporučený obrázek.

Tajemství zde je, jak používat vlastnost a typ porovnání. Můžete použít velké množství hodnot, které by měly být známé z SQL: ‘=’, ‘! =’, ‘>”>= ‘, ‘<‘,‘<= ‘,’ LIKE ‘,’ NOT LIKE ‘,’ IN ‘,’ NOT IN ‘,’ BETWEEN ‘,’ NOT METWEEN ‘,’ EXISTS ‘(from WordPress 3.5 and up) a’ NOT EXISTS ‘(from WordPress 3.5 a nahoru)

Vlastnost type je obvykle důležitá, pokud chcete porovnat čísla nebo data. Možné hodnoty jsou „NUMERIC“, „BINARY“, „CHAR“, „DATE“, „DATETIME“, „DECIMAL“, „SIGNED“, „TIME“ a „UNSIGNED“. Nezapomeňte použít NUMERIC při porovnávání čísel, ve většině ostatních případů byste měli být v pořádku.

Stejně jako u taxonomických dotazů můžete ukládat více požadavků a poté pomocí parametru relace určit vztah mezi nimi.

$ args = array (
‘post_type’ => ‘pošta’,
‘meta_query’ => pole (
‘vztah’ => ‘NEBO’,
pole (
‘key’ => ‘nálada’,
‘value’ => pole (‘šťastný’, ‘úžasný’),
‘porovnání’ => ‘V’,
),
pole (
‘key’ => ‘příjem’,
‘value’ => 500,
‘porovnání’ => ‘>’,
‘type’ => ‘NUMERIC’
),
),
);
$ query = new WP_Query ($ args);

Výše uvedený příklad by zobrazoval příspěvky z hypotetického deníku, kde se stalo něco dobrého. Buď jsem se cítil šťastný nebo úžasný, nebo jsem toho dne vydělal více než 500 dolarů.

Parametry data

Data mohou být trochu složitější, ale jsou velmi flexibilní. WP_Query Documentation má spoustu příkladů, pokud potřebujete více informací.

Načítání příspěvků z určitého času je docela snadné. Pro určení času můžete použít rok, měsíc, w (týden v roce), den a několik dalších parametrů. Níže uvedený kód načte všechny příspěvky od března 2013.

$ args = array (
‘post_type’ => ‘pošta’,
‘rok’ => 2013,
‘month’ => 3
);
$ query = new WP_Query ($ args);

Pokud se chcete dostat do složitějších časových období, budete muset použít date_query. To umožňuje poměrně snadno určit libovolné rozsahy pomocí známého formátu pole. Následující příklad – s laskavým svolením Codex – ukazuje, jak můžete načíst příspěvky, které byly napsány v pracovní dny od 9:00 do 17:00..

$ args = array (
‘post_type’ => ‘pošta’,
‘date_query’ => pole (
pole (
‘hour’ => 9,
‘porovnání’ => ‘>= ‘,
),
pole (
‘hour’ => 17,
‘porovnání’ => ‘<= ‘,
),
pole (
‘dayofweek’ => pole (2, 6),
‘porovnání’ => ‘MEZI’,
),
),
);
$ query = new WP_Query ($ args);

Výsledky objednávky

Pořadí, ve kterém je seznam uveden, je stejně důležité jako prvky uvnitř. Naštěstí nám WordPress nabízí parametry order_by a order. Parametr objednávky je velmi jednoduchý, můžete použít ASC nebo DESC pro řazení vzestupně nebo sestupně.

Parametr order_by může nabývat řady hodnot: ‘none’, ‘ID’, ‘author’, ‘title’, ‘name’, ‘type’, ‘date’, ‘modifiked’, ‘parent’, ‘rand’ , ‘comment_count’, ‘menu_order’, ‘meta_value’, ‘meta_value_num’, ‘post__in’. Obzvláště užitečné může být řazení podle meta_hodnoty. V tomto případě nezapomeňte také zadat pole meta_key.

$ args = array (
‘post_type’ => ‘malování’,
‘meta_query’ => pole (
pole (
‘key’ => ‘cena’,
‘value’ => 50000,
‘porovnání’ => ‘>’,
‘type’ => ‘NUMERIC’
),
),
‘order_by’ => ‘meta_value_num’,
‘meta_key’ => ‘cena’
);
$ query = new WP_Query ($ args);

Tento příklad načte obrazy, jejichž hodnota je vyšší než 50 000 $, a seřazuje je vzestupně podle ceny. Všimněte si, že protože cena je uložena jako číslo, použil jsem meta_value_num pro objednání výsledků, na rozdíl od meta_value, které by se použilo pro řetězce.

Další objednávka, která stojí za zmínku, je post__in. Tento post__in je parametr sám o sobě, umožňuje určit pole ID id, které chcete načíst. Ve výchozím nastavení WordPress objednává příspěvky podle data, pořadí zadané v post__in není zachováno. Pokud použijete post__in jako pořadí podle hodnoty, WordPress objednávku zachová.

$ args = array (
‘post_type’ => ‘pošta’,
‘post__in’ => pole (23, 441, 12, 322, 34, 33),
‘order_by’ => ‘post__in’,
);
$ query = new WP_Query ($ args);

Zabalení

Doufám, že z tohoto úvodu do WP_Query je jasné, že je to opravdu mocná třída. Umožňuje načíst příspěvky pomocí vlastních kritérií standardním způsobem WP. Podívejte se na to dokumentace Další informace a některé skvělé vlastnosti a metody, které tato třída nabízí k manipulaci s dotazem a smyčkou.

WP_Query je součástí toho, co dělá WordPress skvělým obecným CMS – schopností načítat objekty z databáze modulárním a přizpůsobitelným způsobem.

Pokud máte nějaké dotazy, dejte nám vědět v komentářích!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Это интересно
    Adblock
    detector