Alguém poderia me explicar como essa função funciona? Eu sei o que ele faz, mas quando vejo o código-fonte no modelo vigésimo, não entendo como todos os loops estão sendo coletados em um único loop.php (também vi esse arquivo).
Então, como, por exemplo, abstrair uma determinada parte comum do modelo e, em seguida, reutilizá-la em outros modelos?
Comentários
- Tente olhar em codex.wordpress.org/Function_Reference/get_template_part
Resposta
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 de forma semelhante a especificidade conforme se aplica a seletores 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.
Então, por exemplo , você está estilizando um blog e cria um loop .php arquivo que funciona bem para marcar postagens. Mas você planeja com antecedência e o chama em seus arquivos de modelo posteriormente com especificadores de contexto adicionais – digamos, na página de índice, você chama get_template_part( "loop", "index" );
, no modelo único, você chama get_template_part( "loop", "single" );
, nas páginas de arquivo, você chama get_template_part( "loop", "archive" );
e assim por diante. Isso torna muito mais fácil quando você decidir marcar o loop em suas páginas de arquivo de forma diferente da página inicial: basta criar um loop-archive.php modelo e “será usado em vez do loop.php genérico.
Mas a mágica por trás de get_template_part()
está na função locate_template()
, que verifica primeiro o diretório do tema, depois o diretório pai (se existe um) para o arquivo chamado. Isso é muito útil para o desenvolvimento de plug-ins. Em um dos meus plug-ins, eu defino um tipo de postagem personalizado e criei um arquivo de modelo de loop para esse tipo de postagem personalizado no meu diretório de plug-ins. Mas … Eu quero para permitir que temas usando meu plug-in substituam minha marcação, se quiserem. É aqui que locate_template()
realmente faz maravilhas.
locate_template($template_names, $load = false, $require_once = true )
irá procurar por cada um dos nomes no array $ template_names no diretório da folha de estilo, então no temp diretório atrasado. Passar “true” como o argumento $ load significa que requer o primeiro arquivo encontrado e retornará uma string vazia se nenhum arquivo de modelo for localizado. Portanto, posso fazer algo assim no meu plug-in:
if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" );
… o que deve tornar muito fácil para os desenvolvedores de tema personalizar meu plug-in apenas incluindo um arquivo chamado loop-mycustomposttype.php em seu tema.
Comentários
- Substitua locate_template por este, por favor.
include(locate_template( 'loop-mycustomposttype.php'))
Desta forma, é possível passar variáveis. Eu ' encontrei isso aqui link . É ' extremamente útil! - Fazendo isso, ' será necessário alterar isso também. Assim
if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
- Ah, bom ponto. Com a fórmula que dei, a chamada
require
ourequire_once
(delocate_template
) está dentro uma função e, portanto, ' não tem acesso ao escopo atual.
Resposta
Nem todos os loops, o loop principal. 😉 Não importa se você olha para 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 que foi executada antes seu modelo foi chamado.
O modelo loop.php simplesmente executa sobre os itens do loop e os formata. Veja a documentação no Codex .
Se você olhar o loop.php de Twenty-Ten, verá que Twenty-Ten em seguida, diversifica dentro desse único arquivo de modelo.
get_template_part()
simplesmente carrega uma parte do modelo e a percorre. Você também pode extrair partes de seu loop.php em arquivos separados e substituí-los por uma chamada get_template_part("loop", "category")
e assim por diante.
Ou você pode ter um modelo parcial para cada postagem individual no loop e faça com que seu loop.php chame apenas get_template_part("loop","post");
dentro da cláusula while...
. Tudo depende de você.
Resposta
<?php get_template_part( "loop", "index" ); ?>
fará um require () do PHP para o primeiro arquivo que existir …
Então, efetivamente, funcionará como se você estivesse solicitando outro arquivo php.
Atualização : Há uma ligeira diferença para “requerer” – é agrupado dentro de uma função, portanto você deve global
se quiser passar quaisquer variáveis do seu modelo para a sua parte do modelo.