web-dev-qa-db-ja.com

特定のページ(または投稿など)に固有のウィジェット領域を挿入する方法

私はそれらのサイドバーに異なるウィジェットが欲しいと思うように、そのページ(そして投稿も)がホームページと非常に異なるテーマを開発しています。
それをする方法はありますか?

私は single.php のサイドバーを index.php のように呼び出しています。

<?php get_sidebar(); ?>

sidebar.php は次のようになります。

<?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

条件付きタグ を使用して、特定の条件が満たされた場合にのみコンテンツを表示します。

あなたの場合は、おそらく 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>

これは、2つのウィジェット領域が事前に register_sidebar() によって正しく登録されていることを前提としています。

4
Johannes Pille