如何为每个类别动态创建微件化的侧边栏?

时间:2012-06-21 作者:Diana

我想在侧边栏中为每个类别显示不同的内容,但在创建新类别时,我必须为其创建区域。如何动态地拥有小部件区域?

1 个回复
最合适的回答,由SO网友:Diana 整理而成

如果你有很多类别,那不是一件好事,所以要小心!

首先,在中添加以下函数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; ?>
仅此而已,我敢打赌有人可以想出更好的代码,到目前为止,这就成功了。

结束

相关推荐

从外部PHP脚本调用Functions.php中的函数

Preamble<我试图确保以前没有人问过这个问题。我刚开始使用StackExchange,所以我可能没有这么做。我不介意责备;厚皮肤,我学得很快:)THE PROBLEM我编写了一个函数并将其放置在主题函数中。phpfunction serverConnect() { $serverAccess = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if (!$serverAccess) { die(\"