Felipe Elia tipy pro WordPress

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?

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:

závěr



+