Как создать виджетную боковую панель для каждой категории динамически?

Я хочу отобразить другой контент в боковой панели для каждой категории, но по мере того, как я создаю новые категории, я должен создать для этого область. Как я могу обладать виджетами динамически?

Не очень хорошо, если у вас много категорий, поэтому будьте осторожны!

Во-первых, добавьте следующую функцию в 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; ?> 

Вот и все, держу пари, что кто-то может придумать лучший код, теперь это делает трюк.