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?

Django Reinhardt
fonte
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.

jdm2112
fonte
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.

Malisa
fonte
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