Minha parte favorita da hierarquia de modelos do Wordpress é a capacidade de criar rapidamente arquivos de modelo para páginas por lesma, sem ter que editar a página no Wordpress para selecionar um modelo.
Atualmente, podemos fazer isso:
page- {slug} .php
Mas eu gostaria de poder fazer isso:
single- {post_type} - {slug} .php
Para que, por exemplo, em um tipo de postagem chamado review
, eu pudesse criar um modelo para uma postagem chamada "Minha Grande Revisão" emsingle-review-my-great-review.php
Alguém já configurou isso antes? single-{post_type}-{slug}.php
custom-post-types
filters
templates
template-redirect
template-hierarchy
super verdadeiro
fonte
fonte
single-{post_type}-{slug}.php
; portanto, a atualização para o WP 3.4 é outra opção.Respostas:
A) A base no núcleo
Como você pode ver na explicação da Hierarquia de modelos do Codex ,
single-{$post_type}.php
já é suportado.B) Estendendo a hierarquia principal
Agora há alguns filtros e ganchos dentro
/wp-includes/template-loader.php
.do_action('template_redirect');
apply_filters( 'template_include', $template )
get_query_template( $type, ... )
chamado:"$type}_template"
B.1) Como funciona
is_*()
.is_single() && $template = get_single_template()
get_query_template( $type, $templates )
, então , onde$type
estásingle
"{$type}_template"
filtroC) A solução
Como queremos apenas estender a hierarquia com um modelo carregado antes do
"single-{$object->post_type}.php"
modelo real , interceptaremos a hierarquia e adicionaremos um novo modelo ao início da matriz de modelos.NOTA: (Se você quiser usar algo diferente da lesma de objetos padrão), será necessário ajustar de
$slug
acordo com sua estrutura de ligação permanente. Basta usar o que você precisa do mundo todo(object) $post
.Bilhetes Trac
Como a abordagem acima atualmente não é suportada (você só pode filtrar o caminho localizado absoluto dessa maneira), aqui está uma lista de tickets trac:
get_query_template()
fonte
)
dentro do filtro. Fixo. Talvez você queira trocar o traço com um sublinhado antes da lesma dentro do modelo. Apenas para deixar o sufixo se destacar melhor ao examinar os modelos.$templates
é uma matriz. Veja as principais funções nesta pasta (sem data de validade). Certifique-se de testar isso com uma instalação sem plug-ins e o tema padrão. Em seguida, ative um após o outro e veja se o erro ainda ocorre.slug
só está disponível para termos e taxonomias. Você deve substituir$post->post_name
pelo que se adapta à sua estrutura de link permanente. Atualmente, não há como fazer isso automaticamente em todos os casos, recuperando e substituindo o caminho, dependendo da sua estrutura permanente e das regras de reescrita. Espere outra atualização.Seguindo a imagem da Hierarquia de modelos , não vejo essa opção.
Então aqui está como eu iria sobre isso:
Solução 1 (melhor na minha opinião)
Crie um arquivo de modelo e associe-o à revisão
Adicionando o arquivo php do modelo no diretório do tema, ele aparecerá como uma opção de modelo na página de edição da sua postagem.
Solução 2
Provavelmente isso poderia ser conseguido usando o
template_redirect
gancho.No arquivo functions.php:
EDITAR
file_exists
Verificação adicionadafonte
exit;
aí?exit()
necessário para evitar o carregamento do modelo padrão.A resposta principal (de 4 anos atrás) não funciona mais, mas o codex do WordPress tem a solução aqui :
fonte
Usar modelos de página
Outra abordagem para escalabilidade seria duplicar a funcionalidade suspensa do modelo de página no
page
tipo de postagem para o seu tipo de postagem personalizado.Código reutilizável
A duplicação de código não é uma boa prática. As horas extras podem causar inchaço grave em uma base de código, quando tornam muito difícil para um desenvolvedor gerenciar. Em vez de criar um modelo para cada lesma, você provavelmente precisará de um modelo um para muitos que possa ser reutilizado em vez de um para um pós-modelo.
O código
Essa é uma resposta tardia, mas achei que seria valiosa, já que ninguém na Web documentou essa abordagem até onde sei. Espero que isso ajude alguém.
fonte
No meu caso, tenho tipos de postagem personalizados de Álbum e Faixa vinculados por uma taxonomia de Álbum. Eu queria poder usar diferentes modelos únicos para as postagens de álbuns e faixas, dependendo da taxonomia deles.
Com base na resposta de Kaiser acima, escrevi este código. Isso funciona bem.
Nota. Eu não precisava do add_action ().
Agora posso criar modelos chamados single-gregory-cpt-track-tax-serendipity.php e single-gregory-cpt-album-tax-serendipity.php e o WP os usará automaticamente; 'serendipidade fiscal' é a lesma do primeiro termo de taxonomia do álbum.
para referência, o gancho de filtro 'single_template' é declarado em:
/wp-includes/theme.php:
get_query_template()
Obrigado Kaiser pelo código de exemplo.
Cheers, Gregory
fonte
Atualização para o código Brians, descobri que quando a caixa suspensa não estava sendo usada, a opção do modelo "padrão" estava sendo salva em wp_page_template, o que fez com que tentasse encontrar um modelo chamado padrão. essa alteração apenas verifica a opção "padrão" ao salvar e exclui a meta de postagem (útil se você alterou a opção de modelo de volta ao padrão)
fonte