WordPress, passez la variable de page.php à header.php

Publié par Jean-Michel le

J’essaie de créer un thème dans WordPress, et de permettre à l’utilisateur pour certains modèles de page, de charger soit un diaporama dans l’en-tête, soit d’afficher le titre.

Disons que j’ai un nom de modèle appelé Portfolio et un autre modèle de page appelé Portfolio with Slide-show In Head.

Puis-je depuis le portfolio.phpet portfolio-with-slide.phpenvoyer des variables dans le header.phpafin de décider quoi afficher, ou dois-je créer un deuxième en-tête pour la deuxième option et charger celui qui en a besoin dans le fichier de modèle avec get_header('title')etget_header('slide')

Quelle est la meilleure approche ?

Solution n°1 trouvée

Une solution appropriée consiste à écrire un filtre pour remplacer le titre :

function this_is_the_title_now( $title ) {
    // can return un-altered $title or can use fancy logic here
    return( "This is the new title." );
}

add_filter( 'the_title', 'this_is_the_title_now', 10, 2 );

Cela peut être mis dans functions.php de votre thème, ou dans page-whatever.php.

Solution n°2 trouvée

Personnellement, j’utilise la deuxième option – créez un deuxième en-tête pour la deuxième option et chargez celui qui en a besoin dans le fichier de modèle avec get_header('title')et get_header('slide'). C’est la meilleure approche en termes de maintenabilité du code.

Solution n°3 trouvée

puisque wordpress 5.5 get_headera $argsun paramètre prêt à l’emploi :

get_header()

Vous pouvez simplement mettre vos arguments get_headercomme ceci:

get_header( 'yourheadername', [ 'header_arg' => 'XYZ' ] );(si vous utilisez un fichier header.php personnalisé, dans ce cas serait-ce : header-yourheadername.php)

ou pour le fichier header.php par défaut :

get_header( null, [ 'header_arg' => 'XYZ' ] );

puis dans votre fichier d’en-tête, vous pouvez utiliser :

<?php echo $args['header_arg']; ?>
à l’intérieur ifou ce que vous voulez 🙂

Catégories : Wordpress

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *