Mohl by mi někdo vysvětlit, jak tato funkce funguje? Vím, co to dělá, ale když se podívám na zdrojový kód v šabloně Twenty_ten, nechápu, jak se všechny smyčky shromažďují v jedné smyčce.php (viděl jsem také tento soubor).

Jak tedy například odstranit určitou společnou část šablony a poté ji znovu použít v jiných šablonách?

Komentáře

odpověď

Zde jsou velmi dobré úvodní odpovědi.

get_template_part() v zásadě umožňuje vývojářům motivů nastavit pořadí konkrétnosti souborů šablon. Představte si to podobně jako specifičnost, jak to platí pro selektory CSS. Při navrhování něčeho chcete začít s minimem specificity, aby bylo možné ji snadno přepsat v částech designu, které vyžadují individuální pozornost.

Takže například , „upravujete styl blogu a vytvoříte smyčku Soubor .php , který dobře funguje při označování příspěvků. Ale plánujete dopředu a později to zavoláte do souborů šablon s dalšími specifikátory kontextu – řekněme, že na indexové stránce zavoláte get_template_part( "loop", "index" );, na jediné šabloně zavoláte get_template_part( "loop", "single" ); na stránkách archivu zavoláte get_template_part( "loop", "archive" ); atd. Díky tomu je velmi snadné, když se rozhodnete označit smyčku na svých archivních stránkách odlišně od domovské stránky: stačí vytvořit loop-archive.php Šablona a bude použita spíše než obecná loop.php .

Ale kouzlo get_template_part() je ve funkci locate_template(), která kontroluje nejprve adresář motivů, pak nadřazený adresář (pokud jeden existuje) pro soubor s názvem. To je velmi užitečné pro vývoj pluginu. V jednom z mých pluginů jsem definoval vlastní typ příspěvku a vytvořil soubor šablony smyčky pro tento vlastní typ příspěvku v mém adresáři pluginu. Ale … chci povolit motivům pomocí mého pluginu přepsat mé označení, pokud se rozhodnou. Toto je místo, kde locate_template() opravdu dělá zázraky.

locate_template($template_names, $load = false, $require_once = true ) 

vyhledá každé ze jmen v poli $ template_names v adresáři stylů, poté v temp pozdní adresář. Předání hodnoty „true“ jako argument $ load znamená, že bude vyžadovat první nalezený soubor, a pokud nebyl nalezen žádný soubor šablony, vrátí prázdný řetězec. Takže ve svém pluginu mohu udělat něco takového:

if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" ); 

… což by snad mělo vývojářům témat velmi usnadnit přizpůsobení mého pluginu vývojářům soubor s názvem loop-mycustomposttype.php v jejich tématu.

Komentáře

  • Nahraďte prosím locate_template tímto. include(locate_template( 'loop-mycustomposttype.php')) Tímto způsobem je možné předávat proměnné. Našel jsem ' odkaz zde odkaz . Je to ' mimořádně užitečné!
  • Pokud to uděláte, bude nutné to ' změnit. Stejně jako tento if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • Dobrý bod. Podle vzorce, který jsem dal, je uvnitř require nebo require_once volání (z locate_template) funkce a nemá ' t přístup k aktuálnímu rozsahu.

Odpověď

Ne všechny smyčky, hlavní smyčka. 😉 Bez ohledu na to, jestli se podíváte na svou přední stránku nebo kategorii nebo něco víte, vždy budete mít hlavní smyčku. Obsah této hlavní smyčky je určen dotazem, který byl spuštěn před vaše šablona byla vůbec zavolána.

Šablona loop.php pouze přejde nad položkami ve smyčce a naformátuje je. Viz dokumentace v Codexu .

Pokud se podíváte na soubor loop.php Twenty-Ten, uvidíte, že Twenty-Ten pak diverzifikuje v tomto jediném souboru šablony.

get_template_part() pouze načte část šablony a prochází ji. Stejně tak můžete extrahovat části vašeho loop.php do samostatných souborů a nahraďte je get_template_part("loop", "category") atd. hovory.

Nebo můžete mít dílčí šablonu pro každý jednotlivý příspěvek ve smyčce a nechte svůj loop.php volat pouze get_template_part("loop","post"); v rámci klauzule while.... Vše na vás.

Odpověď

Z get_template_part codex :

<?php get_template_part( "loop", "index" ); ?>

provede PHP require () pro první soubor, který existuje …

Účinně to bude fungovat, jako byste požadovali jiný php soubor.

Aktualizace : Existuje malý rozdíl v požadavku „require“ – je zabalen do funkce, takže musíte global, pokud chcete předat jakékoli proměnné ze šablony do části šablony.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *