À quoi is_page_template () se compare-t-il?

10

En parcourant la documentation Wordpress , il est dit que cela se is_page_template()compare à un "nom de modèle", s'il est fourni.

J'ai un modèle stocké dans page-homepage.phpappelé Homepage:

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

Et j'ai du code que je souhaite exécuter dans mon functions.php lorsque j'utilise ce modèle:

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

Mais il n'est pas déclenché lorsque je suis sur une page qui utilise ce modèle.

Lorsque je regarde le code que Wordpress exécute is_page_template(), il semble qu'il vérifie réellement le nom du document, pas le nom du modèle ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

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

Dans mon cas, il semble que ce ne $page_templatesoit page-homepage.phppas le nom du modèle, comme le suggère la documentation ...?

Est-ce que je fais quelque chose de mal?

Django Reinhardt
la source
Bonne observation concernant la documentation.
birgire

Réponses:

15

Votre condition doit être écrite comme ceci:

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

Je crois que la confusion est le résultat de deux choses:

  1. Les documents font référence à "nom" de manière ambiguë. La spécification de "nom de fichier" rendrait la documentation beaucoup plus claire.
  2. Le code derrière is_page_template()montre la get_page_template_slug()fonction à sa base. Cette fonction renvoie en fait un nom de fichier, pas le slug du modèle. https://codex.wordpress.org/Function_Reference/get_page_template_slug

Lorsque vous spécifiez un argument pour la is_page_template()fonction (comme dans l'exemple ci-dessus), le chemin du fichier est relatif à la racine du thème.

Cette fonction ne fonctionnera pas à l'intérieur de la boucle.

jdm2112
la source
2
Ce serait bien d'avoir une explication de ce chemin représente ici.
birgire
1
Ajout de clarifications supplémentaires et de détails sur les raisons pour lesquelles cela peut prêter à confusion.
jdm2112
3
Sensationnel. Un double coup de confusion. Je peux comprendre que les documents soient un peu ambigus (même si cela devrait vraiment être corrigé), mais je suis vraiment surpris que get_page_template_slug()cela ne retourne pas réellement une limace!
Django Reinhardt
D'accord. Apporter un soutien supplémentaire à la notion que «nommer les choses» est l'une des choses les plus difficiles lors de l'écriture de code.
jdm2112
Cette réponse contient la solution des "meilleures pratiques". Cependant, si votre page utilise le "modèle par défaut" (mais qu'il s'agit en fait d'un modèle de page), cette réponse peut vous intéresser.
rinogo
7

Je pense que la meilleure chose à dire est qu'il vérifie le nom du fichier et dans votre cas ce serait page-homepage.php. donc:

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

Il faut également penser au fait que le fichier modèle est réellement stocké dans un autre dossier à l'intérieur du thème. Lire la suite

Une dernière chose, Template Name: Homepagec'est généralement ce qui est utilisé pour identifier le modèle lors de la création d'une page ou d'un article.

Malisa
la source
Comme le souligne une autre réponse - elle prend également en considération le chemin. page-templates/page-homepage.phpest différent du modèle dans la racine du thème.
Howdy_McGee
Intéressant et quelque chose que je ne savais pas, juste pour confirmer, je peux stocker les modèles de page en dehors du dossier du thème ou du thème enfant?
Malisa