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ê chama get_template_part( 'loop', 'single' );
, nas páginas de arquivo, você chama get_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ção locate_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 que locate_template()
realmente funciona 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 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:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
include( 'loop-mycustomposttype.php' );
... o que deve facilitar a personalização do meu plugin para desenvolvedores de temas, incluindo um arquivo chamado loop-mycustomposttype.php em seu tema.