Quero mover arquivos de modelo de página como page-{slug}.php
para um subdiretório dentro do meu tema, de forma que o WordPress os reconheça automaticamente. Se os modelos de página do formulário mencionado não existirem no subdiretório, o WordPress deverá retornar às regras de carregamento do modelo padrão. Como posso conseguir isso?
Nota 1: Esta pergunta e as respostas correspondentes são mais genéricas para os modelos de página e esse link menciona template-parts/page
, o que não é a mesma coisa.
Nota-2: Eu tenho vários page-{slug}.php
arquivos de modelo de página parecidos, então quero movê-los para o subdiretório para uma organização de arquivos mais organizada.
theme-development
themes
page-template
directory
manifestador
fonte
fonte
Respostas:
Como os modelos de página são carregados:
De acordo com a Hierarquia de modelos do WordPress padrão , uma
page
solicitação carrega um modelo com base na prioridade e na nomeação, conforme indicado abaixo:Custom Page Template
: se definido no editor de páginas.page-{slug}.php
page-{url-encoded-slug}.php
: somente para caracteres de vários bytes.page-{id}.php
page.php
singular.php
index.php
Entre estes,
singular.php
e na verdade nãoindex.php
são modelos de página. é o modelo de fallback para qualquer tipo de postagem única e é o modelo de fallback final para qualquer coisa que um modelo do WordPress deva carregar. Portanto, os cinco primeiros são modelos de página.singular.php
index.php
Como injetar arquivos de modelo de um subdiretório dentro da hierarquia:
A função principal do WordPress
get_page_template()
gera apage
matriz de hierarquia de modelos necessária e, pouco antes de decidir exatamente qual arquivo de modelo será carregado da hierarquia, o WordPress aciona opage_template_hierarchy
gancho de filtro. Portanto, a melhor maneira de adicionar um subdiretório, onde o WordPress procurarápage-{slug}.php
modelos automaticamente, é usar esse filtro e injetar nomes de arquivos adequados em relação a esse subdiretório na matriz de hierarquia de modelos de página.Agora, para nosso propósito, injetaremos o
sub-directory/page-{slug}.php
nome do arquivo antespage-{slug}.php
da matriz de hierarquia de modelos passada para a função de retorno de chamada de hooks. Dessa forma, o WordPress carregará osub-directory/page-{slug}.php
arquivo, se existir, caso contrário, seguirá a hierarquia normal de carregamento do modelo de página. Obviamente, para manter a consistência, ainda daremosCustom Page Template
uma prioridade mais alta em comparação ao nossosub-directory/page-{slug}.php
arquivo. Portanto, a hierarquia de modelo de página modificada se tornará:Custom Page Template
: se definido no editor de páginas.sub-directory/page-{slug}.php
sub-directory/page-{url-encoded-slug}.php
: somente para caracteres de vários bytes.page-{slug}.php
page-{url-encoded-slug}.php
: somente para caracteres de vários bytes.page-{id}.php
page.php
functions.php
CÓDIGO de amostra :Se você planeja fazer essa alteração apenas em um único tema, poderá usar o seguinte CÓDIGO no
functions.php
arquivo do seu tema ativo :Exemplo de plug-in:
Se você deseja seguir a mesma organização de arquivos de modelo em vários temas, é melhor manter esse recurso separado do seu tema. Nesse caso, em vez de modificar o
functions.php
arquivo do tema com o código de amostra acima, você precisará criar um plug-in simples com o mesmo código de amostra.Salve o seguinte código com um nome de arquivo, por exemplo,
page-slug-template-subdir.php
dentro doplugins
diretório do WordPress :Uso:
fonte