WordPress : Comment personnaliser une section d’un widget uniquement sur certaines pages ou page

Publié par Jean-Michel le

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: nonepour 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-partsrépertoire, créez un footerrépertoire à l’intérieur, puis copiez template-parts/footer/footer-widgets.phpdu 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 le sidebars_widgetsfiltre 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.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

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