WordPress : Comment personnaliser une section d’un widget uniquement sur certaines pages ou page
J’utilise le thème WordPress vingt-neuf par défaut mais j’aimerais savoir comment je peux supprimer cette ligne <?php get_template_part( 'template-parts/footer/footer', 'widgets' ); ?>
uniquement sur certaines pages dans footer.php
. Similaire à cet article : Comment ajouter un widget spécifique à une seule page ?. En gros, j’aimerais savoir comment changer une section d’un widget dans un thème enfant sur certaines pages.
Solution n°1 trouvée
Je ne pense pas qu’il existe un moyen simple de forcer WordPress à exclure une partie du modèle ou à en charger une autre. Voir 1 et 2 pour une discussion sur Stack Exchange et des solutions de contournement. MAIS dans le cas particulier des widgets, vous pouvez implémenter un filtre (à savoir, widget_display_callback
) dans lequel vous vérifiez où le widget doit être affiché, et sur quel type de page il peut être affiché, et dire à WordPress de ne pas l’afficher (en retournant FALSE
). En savoir plus sur Stack Exchange 3 et la référence de code WordPress 4.
En ce qui concerne les solutions de contournement, la plus simple consiste probablement à utiliser un CSS display: none
pour que le navigateur n’affiche pas les widgets (ou peut-être toute la zone des widgets) sur certaines pages (si besoin est, il existe des moyens simples d’augmenter les classes CSS pour le corps tag pour indiquer de quel type de page il s’agit).
Édit : ajout
Étant donné que vous voudrez créer un thème enfant et que le thème Twentynineteen est bien organisé, j’ai pensé à quelques alternatives, qui devraient être assez simples.
thème enfant avec une partie de modèle spéciale
dans votre thème enfant, créez un template-parts
répertoire, créez un footer
répertoire à l’intérieur, puis copiez template-parts/footer/footer-widgets.php
du thème Twentynineteen à l’emplacement correspondant dans votre thème enfant. Modifiez la copie pour ajouter votre condition ; quelque chose comme ça
if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
<aside class="widget-area" role="complementary" aria-label="<?php esc_attr_e( 'Footer', 'twentynineteen' ); ?>">
<?php
$cats = get_the_category();
$cat_name = $cats[0]->name;
print_r($cat_name);
if ( is_active_sidebar( 'sidebar-1' ) and
(strcasecmp('category with no footer widgets', $cat_name) == 0)) {
?>
<div class="widget-column footer-widget-1">
<?php dynamic_sidebar( 'sidebar-1' ); ?>
</div>
<?php
}
?>
</aside><!-- .widget-area -->
<?php endif; ?>
-
filtre sidebars_widgets
Utilisez lesidebars_widgets
filtre pour supprimer entièrement la zone du widget. quelque chose comme add_filter( ‘sidebars_widgets’, ‘remove_footer_widget_area’ );function remove_footer_widget_area( $sidebars_widgets ) { $cats = get_the_category(); $cat_name = $cats[0]->name; if( (strcasecmp('category with no footer widgets', $cat_name) == 0) ) { unset($sidebars_widgets['sidebar-1']); } return $sidebars_widgets; }
voir 5
quelques remarques :
Je suppose que le test d’affichage des widgets dépend de la catégorie de la page, et la page n’appartient qu’à une seule catégorie. Modifiez au besoin.
Pour des raisons historiques, 'sidebars'
signifie ici vraiment 'widget areas'
. WordPress regorge d’anachronismes comme celui-ci.
Un autre anachronisme est le nom de la fonction get_the_category()
, qui obtient un tableau de catégories. Il devrait donc vraiment s’appeler get_the_categories()
.
La deuxième approche copie et modifie un fichier de modèle à partir du thème parent. Mais le modèle est petit et peu susceptible de changer.
0 commentaire