web-dev-qa-db-fra.com

Comment insérer des zones de widgets spécifiques à certaines pages (ou publications, etc.)?

Je développe un thème dont les pages (ainsi que les publications) sont si différentes de la page d'accueil que je veux des widgets différents sur leurs barres latérales.
Y a-t-il un moyen de le faire?

J'appelle la barre latérale sur single.php de cette façon, exactement comme sur index.php :

<?php get_sidebar(); ?>

Le sidebar.php est comme suit:

<?php
/**
 * The Sidebar containing the primary and secondary widget areas.
 ?>

    <aside>
        <ul>

<?php
    /* When we call the dynamic_sidebar() function, it'll spit out
     * the widgets for that widget area. If it instead returns false,
     * then the sidebar simply doesn't exist, so we'll hard-code in
     * some default sidebar stuff just in case.
 */
if ( ! dynamic_sidebar( 'primary-widget-area' ) ) : ?>


    <?php endif; // end primary widget area ?>
    </ul>

<?php
    // A second sidebar for widgets, just because.
    if ( is_active_sidebar( 'secondary-widget-area' ) ) : ?>

        <ul>
                <?php dynamic_sidebar( 'secondary-widget-area' ); ?>
        </ul>

<?php endif; ?>

    </aside>
2
Otavio Vidal

Utilisez Balises conditionnelles pour afficher le contenu uniquement si certaines conditions sont remplies.

Dans votre cas, vous cherchez probablement à utiliser is_front_page() .

<aside>
    <ul>

    <?php
        if ( function_exists( 'dynamic_sidebar' ) ) {
             if ( is_front_page() ) {
                 if ( ! dynamic_sidebar( 'frontpage-widget-area' ) ) {
                     echo '<li>No sidebars for the frontpage.</li>'; // some default output
                 }
             } else {
                 if ( ! dynamic_sidebar( 'primary-widget-area' ) ) {
                     echo '<li>No sidebars for posts/pages.</li>'; // some default output
                 }
             }
        } else {
            echo '<li>Sidebars disabled.</li>'; // some default output
        }
    ?>

    </ul>
</aside>

En supposant que les deux zones de widget aient été correctement enregistrées via register_sidebar() au préalable.

4
Johannes Pille