カテゴリごとにサイドバーに異なるコンテンツを表示したいのですが、新しいカテゴリを作成するときには、そのための領域を作成する必要があります。ウィジェットエリアを動的に設定する方法
あなたがたくさんのカテゴリーを持っているならば、良いことではないので、注意してください!
まず、functions.php
に次の関数を追加します。
add_action( 'widgets_init', 'generate_widget_areas' );
function generate_widget_areas() {
//Do not create for uncategorized category
$terms = get_categories('exclude=1&hide_empty=0');
foreach ($terms as $term) {
register_sidebar( array(
'name' => 'Category '.$term->name,
'id' => $term->slug.'-widget-area',
'description' => 'Widget area for category and posts in '.$term->name,
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>' ) );
}
}
これで十分です。現在のウィジェットでは、すべてのカテゴリにウィジェット領域があります。今度はカテゴリのための区域を示さなければならない。私はカテゴリのリストのための領域(カテゴリの投稿のリスト)とカテゴリを使用している投稿のための同じ領域(単一の投稿ページ)を表示するのが好きです。
sidebar.php
に以下を追加します。
<?php if (is_category() ||is_archive()||is_single()) : ?>
<div id="categories" class="widget-area" role="complementary">
<ul class="xoxo">
<?php
$category = get_the_category();
if (in_category($category[0]->slug) || is_category($category[0]->slug)){
dynamic_sidebar( $category[0]->slug.'-widget-area' );
};
?>
</ul>
</div><!-- #categories .widget-area -->
<?php endif; ?>
それがすべてです、私は誰かがより良いコードを思い付くことができると思います、今ではこれがトリックをします。