Como usar get_template_part ()?

23

Alguém poderia me explicar como esta função funciona? Eu sei o que isso faz, mas quando eu olho para o código-fonte no modelo de vinte e dez, eu não entendo como todos os loops estão sendo coletados em um único loop.php (eu vi esse arquivo também).

Como, por exemplo, abstrair uma parte comum do modelo e depois reutilizá-lo em outros modelos?

    
por Amit Erandole 21.02.2011 / 17:17
fonte

3 respostas

21

Algumas respostas introdutórias muito boas aqui.

Basicamente, get_template_part() permite que desenvolvedores de temas configurem uma ordem de especificidade de arquivos de modelo. Pense nisso de forma semelhante à especificidade que se aplica aos 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 precisa de atenção individual.

Por exemplo, você está estilizando um blog e cria um arquivo loop.php que funciona bem para marcar postagens. Mas você planeja adiante e chama isso em seus 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, chama get_template_part( 'loop', 'single' ); , em páginas de arquivo, chama get_template_part( 'loop', 'archive' ); e assim por diante. Isso torna muito fácil quando você decide marcar o loop em suas páginas de arquivo de forma diferente da home page: basta criar um template loop-archive.php e ele será usado em vez de o 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 existir) para o arquivo chamado. Isso é muito útil para o desenvolvimento de plugins. Em um dos meus plugins, eu defino um tipo de post personalizado e criei um arquivo de modelo de loop para esse tipo de post personalizado no meu diretório de plug-in. Mas ... eu quero permitir que os temas que usam o meu plugin substituam a minha marcação se eles escolherem. É aqui que locate_template() realmente faz maravilhas.

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

procurará cada um dos nomes na matriz $ template_names no diretório da folha de estilos e, em seguida, no diretório de modelos. Passar 'true' como o argumento $ load significa que ele irá o primeiro arquivo encontrado, e irá retornar uma string vazia se nenhum arquivo de template for localizado. Então eu posso fazer algo assim no meu plugin:

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

... o que, esperamos, tornará muito fácil para desenvolvedores de temas customizarem o meu plugin apenas incluindo um arquivo chamado loop-mycustomposttype.php em seu tema.

    
por goldenapples 08.02.2012 / 18:13
fonte
5

Nem todos os loops, o loop principal. ;-) Não importa se você olha seu frontpage 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 que seu modelo seja chamado.

O modelo loop.php simplesmente executa os itens no loop e os formata. Veja a documentação no Codex .

Se você olhar para o loop.php do Twenty-Ten, você pode ver que Twenty-Ten então diversifica dentro daquele único arquivo de modelo.

get_template_part() meramente carrega uma parte do modelo e passa por ela. Você pode também extrair partes do seu loop.php em arquivos separados e substituí-los por um get_template_part('loop', 'category') e assim por diante chamadas.

Ou você pode ter um modelo de peça para cada postagem individual no loop e fazer com que seu loop.php chame somente get_template_part('loop','post'); dentro da cláusula while... . Tudo depende de você.

    
por wyrfel 21.02.2011 / 17:38
fonte
3

Do get_template_part codex :

  

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

     

fará um PHP require () para o primeiro arquivo que existe ...

Então, efetivamente, funcionará como se você estivesse exigindo outro arquivo php.

Atualização : Há uma pequena diferença para "exigir" - Ele é agrupado dentro de uma função, então você deve global se quiser passar variáveis do seu modelo para a parte do seu modelo. / p>     

por icc97 08.02.2012 / 12:02
fonte