WordPress je CMS, a proto obsah manipulace je jedním z hlavních pilířů nástroj. V tomto příspěvku pochopíte proces, který WP používá k načtení toho, co je třeba zobrazit, a také jak je možné tento proces změnit.
účel tohoto textu v žádném případě nenahrazuje oficiální dokumentaci, která by měla být vždy konzultována. Vaším cílem je dát na jednom místě, co začátečníci by měli vědět, než začnou hledat další informace.
- co je to Dotaz WordPress?
- co je WP_Query?
- Podmíněné Kategorie a WP_Query
- vytváření vlastních smyček: WP_Query a get_posts ()
- vytváří smyčku s WP_Query
- vytvoření smyčky s get_posts ()
- rozdíl mezi WP_Query a get_posts()
- globální WordPress wp_query a WordPress wp_the_query
- proč by neměl být query_posts() použit v souborech motivů?
- jak změnit hlavní dotaz? Použití pre_get_posts
- další příklad: odstranit kategorii ze seznamu blogu
- závěr
co je to Dotaz WordPress?
dotaz v angličtině znamená dotaz a je obvykle termín používaný k označení příkazu v SQL (Structured Query Language). Ve WordPressu nazýváme dotazy dotazy na obsah vytvořené prostřednictvím třídy wp_query.
co je WP_Query?
WP_Query je třída PHP za všemi vyhledáváními obsahu v WordPress. Ve své konstrukci přijímá několik parametrů, včetně typů příspěvků, metadat, taxonomií a dat, a také umožňuje vytvářet vlastní parametry.
wp_query třídy je spuštěna pro všechny požadavky na váš web, s výjimkou možná velmi vzácné výjimky pro Plugin-řízené adresy, které přeruší normální tok. Pokaždé, když zavoláme stránku, příspěvek, taxonomický termín atd. WordPress interpretuje požadovanou adresu prostřednictvím rozhraní rewrite API a na základě interpretovaných argumentů vytvoří WP_Query.
Podmíněné Kategorie a WP_Query
vytváření vlastních smyček: WP_Query a get_posts ()
když hovoříme o smyčce v WordPress mluvíme o iteraci (bez n) tím, že vybrané příspěvky. Obvykle máme pouze jednu smyčku, která se vždy podobá níže uvedenému kódu:
pokud existují příspěvky, iterujte je. První příkaz uvnitř while
je the_post()
, který říká WordPress, aby vložil proměnné dalšího příspěvku smyčky do globální proměnné $post
pomocí metody setup_postdata()
třídy wp_query.
toto je vzhled hlavní smyčky, to znamená iterace sadou příspěvků, které WordPress našel při dekódování požadavku a hledání Odpovídajícího obsahu. Pokud budeme potřebovat další sadu příspěvků (související obsah, obsah určité kategorie mimo váš soubor nebo příspěvky zveřejněny poté, co je zobrazen, například), můžeme to udělat dvěma způsoby: vytvoření nového objektu wp_query, nebo volání v get_posts () funkce. Oba dělají totéž, ale vrátí se k vám různé věci.
vytváří smyčku s WP_Query
jednoduchý příklad, jak vytvořit smyčku s WP_Query:
všimněte si, jak testování a iterace have_posts()
zůstat tam, stejně jako the_post()
, ale tentokrát jako metody, proměnné jsme vytvořili.
funkci wp_reset_postdata () slouží k obnovení globální proměnné $post
do stavu před náš dotaz, že se to bude dát zpět do globální $post
post globální $wp_query
, což uvidíme později.
vytvoření smyčky s get_posts ()
stejný příklad pomocí funkce get_posts()
:
funkce get_the_title () přijímá jako parametr příspěvek odlišný od toho, co je v globální proměnné $post
. Pokud potřebujete použít the_content () funkce, například, budete muset změnit globální, takto:
rozdíl mezi WP_Query a get_posts()
základní rozdíl je to, co budete mít přístup k. Pomocí WP_Query máte například přístup k počtu nalezených příspěvků ($query->found_posts
) a počtu možných stránek ($query->max_num_pages
). get_posts()
funkce, na druhou stranu přináší některé již vyplněné argumenty kromě toho, ve výchozím nastavení, je mírně rychlejší: to projde no_found_rows
parametr jako pravda, brání poslední dotaz z s SQL_CALC_FOUND_ROWS
varianta a, s tím, vyjímá MySQL od absolvování celkové množství řádků našel.
globální WordPress wp_query a WordPress wp_the_query
v tomto procesu tlumočení žádosti a vygenerování wp_query objekt třídy WordPress vytvoří dvě globální proměnné: $wp_query
, které jste pravděpodobně někde viděli, a $wp_the_query
, což bude vždy původní kopie toho, co uživatel požadoval. Pokud si někdo pohrává s $wp_query
, můžeme jej alespoň vrátit do normálního stavu pomocí $wp_the_query
. To je přesně to, co dělá funkce wp_reset_query ().
proč by neměl být query_posts() použit v souborech motivů?
toto je výchozí tok žádost na adresu své stránky mimo palubní desku:
neměli byste používat query_posts (), protože to bylo nazýváno dříve. Opětovným voláním duplikujete zpracování (požádáte WordPress o další dotaz) a navíc potenciálně ignorujete, co již některé pluginy používají.
stránkování je dalším příkladem toho, jak použití query_posts()
může narušit vaši práci. Pokud chcete zobrazit, 15 příspěvků na stránku v určité kategorii a pokusit se přepsat výchozí WP částku prostřednictvím query_posts()
budete mít situaci, kde první položka na druhé stránce by měla být 16, ale ve skutečnosti je to pouze 11.
jak změnit hlavní dotaz? Použití pre_get_posts
použití query_posts()
bylo nějakou dobu nevhodné. Od té doby, mnoho z nich je vysvětleno, proč a povzbudil vývojáře, aby použití akce pre_get_posts, se zvláštním důrazem na Leo Bahiano, kteří láskyplně přezdívaný akce preguetinho (použití hříčky s preguetinho udělat, Leo Bahiano je oprávněn v komentářích).
použití je jednoduché. Chcete-li například odstranit stránkování ve vyhledávání, můžete použít následující kód v motivu functions.php
:
kód přiřadí svou funkci háku pre_get_posts
, takže jeho funkce bude provedena při každém Zpracování dotazu. V ní se musíme ujistit, že jsme jen chodit do práce na potřebné dotazy, a tak jsme test, zda jsme opravdu v „přední“ části webu (tímto způsobem jsme se nerušit nic z panelu), pokud jsme v hlavním dotazu na stránku, která je, pokud dotaz v otázce je $wp_the_query
a Pokud je tohle všechno pravda, že jsme změnit atribut posts_per_page
-1
, což znamená žádný limit příspěvků.
další příklad: odstranit kategorii ze seznamu blogu
pokud budete potřebovat mnoho změn, které můžete připojit je všechny v jediné funkci: