Alguém poderia me explicar como essa função funciona? Eu sei o que ele faz, mas quando olho para o código-fonte no modelo twenty_ten, não entendo como todos os loops estão sendo coletados em um único loop.php (vi esse arquivo também).
Então, como, por exemplo, abstraia uma determinada parte comum do modelo e a reutiliza em outros modelos?
get-template-part
Amit Erandole
fonte
fonte
Respostas:
Algumas respostas introdutórias muito boas aqui.
Basicamente,
get_template_part()
permite que os desenvolvedores de temas configurem uma ordem de especificidade dos arquivos de modelo. Pense nisso da mesma forma que a especificidade que se aplica aos seletores de CSS. Ao projetar algo, você deseja começar com o mínimo de especificidade, para que possa ser facilmente substituído em partes de um design que precisam de atenção individual.Por exemplo, você cria um blog e cria um arquivo loop.php que funciona bem para marcar postagens. Mas você planeja com antecedência e os chama nos arquivos de modelo mais tarde, com especificadores de contexto adicionais - digamos, na página de índice, você chama
get_template_part( 'loop', 'index' );
, no modelo único, você chamaget_template_part( 'loop', 'single' );
, nas páginas de arquivo, você chamaget_template_part( 'loop', 'archive' );
e assim por diante. Isso facilita muito quando você decide marcar o loop em suas páginas de arquivo de maneira diferente da página inicial: basta criar um modelo loop-archive.php e ele será usado em vez do loop.php genérico .Mas a mágica por trás
get_template_part()
está na funçãolocate_template()
, que verifica primeiro o diretório do tema, depois o diretório pai (se existir) para o arquivo nomeado. Isso é muito útil para o desenvolvimento de plugins. Em um dos meus plug-ins, defino um tipo de postagem personalizado e criei um arquivo de modelo de loop para esse tipo de postagem personalizado no diretório do meu plugin. Mas ... quero permitir que os temas usando o meu plug-in substituam minha marcação, se assim o desejarem. É aqui quelocate_template()
realmente funciona maravilhas.procurará cada um dos nomes na matriz $ template_names no diretório da folha de estilo e depois no diretório do modelo. Passar 'true' como o argumento $ load significa que ele exigirá o primeiro arquivo encontrado e retornará uma string vazia se nenhum arquivo de modelo estiver localizado. Para que eu possa fazer algo assim no meu plugin:
... o que deve facilitar a personalização do meu plugin para desenvolvedores de temas, incluindo um arquivo chamado loop-mycustomposttype.php em seu tema.
fonte
include(locate_template( 'loop-mycustomposttype.php'))
Desta forma é possível passar variáveis. Encontrei este link aqui . É extremamente útil!if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
require
ourequire_once
(delocate_template
) está dentro de uma função e, portanto, não tem acesso ao escopo atual.Nem todos os loops, o loop principal. ;-) Não importa se você olha para a sua página inicial ou uma categoria ou quem sabe o que, você sempre terá um loop principal. O conteúdo desse loop principal é determinado pela consulta executada antes da chamada do seu modelo.
O modelo loop.php simplesmente passa por cima dos itens no loop e os formata. Veja a documentação no Codex .
Se você olhar para loop.php de Twenty-Ten, você pode ver que Vinte e dez, em seguida, diversifica dentro desse único arquivo de modelo.
get_template_part()
apenas carrega uma parte do modelo e a percorre. Você também pode extrair partes do seu loop.php em arquivos separados e substituí-los por umaget_template_part('loop', 'category')
e outras chamadas.Ou você pode ter um modelo de peça para cada postagem individual no loop e fazer com que seu loop.php chame apenas
get_template_part('loop','post');
dentro dawhile...
cláusula. Tudo depende de você.fonte
Desde o codex get_template_part :
Tão efetivamente funcionará como se você estivesse exigindo outro arquivo php.
Atualização : Há uma pequena diferença em 'exigir' - ele está dentro de uma função, portanto você deve
global
passar se quiser passar variáveis do modelo para a parte do modelo.fonte