web-dev-qa-db-fra.com

is_page_template ne fonctionne pas comme prévu

J'essaie de servir différents en-têtes en fonction du type de page sur lequel l'utilisateur se trouve. Ceci est mon code.

<!-- IF HOME -->
        <?php if ( is_front_page() && is_home() ) : ?>
        <?php get_template_part( 'template-parts/headers/home-header' ); ?> 

        <!-- IF TEMPLATES -->

        <?php elseif ( is_page_template('archive-mobile_photo.php') ) : ?>
        <?php get_template_part( 'template-parts/headers/home-header' ); ?> 

        <!-- IF  POST -->
        <?php else : ?>
        <?php get_template_part( 'template-parts/headers/Zine-header' ); ?>     

        <?php endif; ?>

Ce qui est étrange, c'est que la page d'accueil et les pages de publication fonctionnent correctement, mais la vérification à l'aide de is_page_template() ne fonctionne pas. J'ai le plugin moniteur de requête et il confirme que la page est le modèle archive-mobile_photo.php.

Je suis assez nouveau dans WordPress et je suis totalement perdu.

1
Garrett Scafani

Il semble que vous vérifiiez si vous êtes sur l'archive du type d'article mobile_photo avec cette ligne:

<?php elseif ( is_page_template( 'archive-mobile_photo.php' ) ) : ?>

Si c'est effectivement le cas, utilisez is_post_type_archive( $post_types ) à la place:

<?php elseif ( is_post_type_archive( 'mobile_photo' ) ) : ?>
1
Dave Romsey

Plutôt que d'utiliser les conditions de base pour charger les en-têtes en tant que parties de modèle, il serait plus lisible d'utiliser la fonctionnalité intégrée à get_header() lorsque vous l'appelez pour chaque modèle de page. Ces fichiers vivraient à la racine du dossier du thème.

Vous nommeriez vos deux fichiers header-home.php et header-Zine.php et appelez-les dans le modèle de page avec:

get_header('home');

et

get_header('Zine');

Si vous avez besoin des conditions pour une page plus complexe, vous pouvez toujours vérifier la page et charger le fichier approprié en fonction de vos critères. Il y a aussi un exemple dans le codex.

Je ne suis pas sûr de savoir quelle est la différence entre get_header() et get_template_part() mais si rien d'autre, je pense que c'est plus lisible et qu'il respecte le standard WordPress.

0
Jeremy Ross