Com o que is_page_template () se compara?


10

Examinando a documentação do Wordpress , ele diz que se is_page_template()compara a um "nome de modelo", se houver.

Eu tenho um modelo armazenado page-homepage.phpchamado Homepage:

/*
 * Template Name: Homepage
 * Description: The template for displaying the homepage
 */

E eu tenho algum código que desejo executar no meu functions.php quando estou usando esse modelo:

if (is_page_template('Homepage')) { 
   ...

Mas não está sendo acionado quando estou em uma página que usa esse modelo.

Quando olho para o código que o Wordpress executa is_page_template(), parece que ele realmente verifica o nome do documento, não o nome do modelo ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

    if ( $template == $page_template )
        return true;

Na minha instância parece que $page_templateé page-homepage.php- não o nome do modelo, como a documentação sugere ...?

Estou fazendo algo errado?


Boa observação sobre a documentação.
birgire

Respostas:


15

Sua condição deve ser escrita assim:

if (is_page_template('path/file.php')) { 
    // Do stuff
}

Eu acredito que a confusão é resultado de duas coisas:

  1. Os documentos se referem a "nome" ambiguamente. A especificação de "nome do arquivo" tornaria a documentação muito mais clara.
  2. O código por trás is_page_template()mostra a get_page_template_slug()função em seu núcleo. Essa função realmente retorna um nome de arquivo, não a lesma do modelo. https://codex.wordpress.org/Function_Reference/get_page_template_slug

Ao especificar um argumento para a is_page_template()função (como no exemplo acima), o caminho do arquivo é relativo à raiz do tema.

Esta função não funcionará dentro do loop.


2
Seria bom ter uma explicação que caminho significa aqui.
birgire

11
Esclarecimentos adicionais e detalhes adicionais sobre por que isso pode ser confuso.
Jdm2112

3
Uau. Um golpe duplo de confusão. Eu posso entender os documentos como um pouco ambíguos (embora realmente deva ser corrigido), mas estou realmente surpreso que get_page_template_slug()isso não retorne uma lesma!
Django Reinhardt

Acordado. Dar mais suporte à noção de que "nomear coisas" é uma das coisas mais difíceis ao escrever código.
Jdm2112 09/09/19

Esta resposta contém a solução "melhores práticas". No entanto, se sua página estiver usando o "modelo padrão" (mas na verdade é um modelo de página), essa resposta poderá lhe interessar.
rinogo 9/08/19

7

Acho que a melhor coisa a dizer é que ele verifica o nome do ARQUIVO e, no seu caso, seria page-homepage.php. tão:

if (is_page_template('page-homepage.php')) { 
  ...

Outras coisas em que pensar é se o arquivo de modelo é realmente armazenado em outra pasta dentro do tema. consulte Mais informação

Mais uma coisa, Template Name: Homepagegeralmente é o que é usado para identificar o modelo ao criar uma página ou postagem.


Como outra resposta aponta - também leva o caminho em consideração. page-templates/page-homepage.phpé diferente do modelo na raiz do tema.
Howdy_McGee

Interessante e algo que eu não sabia, só para confirmar, posso armazenar os modelos de página fora da pasta do tema ou tema filho?
Malisa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.