web-dev-qa-db-fra.com

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

En parcourant la documentation Wordpress , il est indiqué que is_page_template() se compare à un "nom de modèle", le cas échéant.

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

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

Et j’ai du code à exécuter dans mon fichier functions.php lorsque j’utilise ce modèle:

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

Mais cela ne se déclenche pas lorsque je suis sur une page utilisant ce modèle.

Quand je regarde le code que Wordpress exécute pour 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 $page_template est page-homepage.php - pas le nom du modèle, comme le suggère la documentation ...?

Est-ce que je fais quelque chose de mal?

10
Django Reinhardt

Votre condition devrait ê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ë. Spécifier "nom de fichier" rendrait la documentation beaucoup plus claire.
  2. Le code derrière is_page_template() montre la fonction get_page_template_slug() à sa base. Cette fonction renvoie en fait un nom de fichier, pas le slug du template. https://codex.wordpress.org/Function_Reference/get_page_template_slug

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

Cette fonction ne fonctionnera pas dans la boucle.

14
jdm2112

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

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

Il faut également penser si le fichier de modèle est réellement stocké dans un autre dossier du thème. Lire la suite

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

6
Malisa