下面的代码生成当前活动父类别的子类别的子菜单。该代码还生成顶级父类别的子类别,同时查看这些类别中的子类别和帖子。这个.current-cat
CSS类应用于活动子类别。
这是我能找到的最灵活的代码来解决这个一般问题。
我很好奇,是否有人有办法解决这个代码没有解决的一个问题——在查看该类别中的帖子时,将类添加到当前子类别中。
<?php
$categories = get_the_category();
echo \'<ul>\';
foreach($categories as $category){
$parent = $category->parent;
if($category->parent == 0){
}
else{
wp_list_categories("child_of=$parent&title_li");
}
}
echo \'</ul>\';
?>
为了进一步描述我在寻找什么:
假设父类别是“船”,子类别是“船”。我写了一篇题为“如何购买Skooner”的文章,并将其归档在Boats>Skooner下。当我导航到Boats类别时,该代码将skooners显示为子类别,并分配一个CSS类,该类允许我们通过design指示这是我们正在查看的类别。然而,当我浏览到“How to Buy a Skooner”(如何购买Skooner)文章(在Boats>Skooner下归档)时,仍然会显示相应的子类别,但缺少CSS类.current-cat
.
要查看此操作,请访问http://themeforward.com/demo2/category/category/ 并使用右侧的子菜单导航到“链接”类别。然后,单击“链接”文章,您会注意到它失去了通过应用的紫色样式.current-cat
.
最合适的回答,由SO网友:Michael 整理而成
与AndrettiMilas的答案非常相似:
add_filter(\'wp_list_categories\',\'style_current_cat_single_post\');
// filter to add the .current-cat class to categories list in single post
function style_current_cat_single_post($output) {
if( is_single() ) :
global $post;
foreach ( get_the_category($post->ID) as $cat ) {
$cats[] = $cat->term_id;
}
foreach($cats as $value) {
if(preg_match(\'#item-\' . $value . \'">#\', $output)) {
$output = str_replace(\'item-\' . $value . \'">\', \'item-\' . $value . \' current-cat">\', $output);
}
}
endif;
return $output;
}
改编自
one of my articles.
SO网友:AndrettiMilas
我认为这里必须有一个代码密集度较低的答案,所以我将把这个问题保留一段时间,然而,我发现,将此代码添加到函数中。php仍然使用我在原始问题中提供的代码,这是一种可能的解决方案。
// Generate the current-cat class when viewing single posts
class singlePostCurrentCat {
function wp_list_categories ($text) {
global $post;
if (is_singular()) {
$categories = wp_get_post_categories($post->ID);
foreach ($categories as $category_id) {
$category = get_category($category_id);
$text = preg_replace(
"/class=\\"(.*)\\"><a ([^<>]*)>$category->name<\\/a>/",
\' class="$1 current-cat"><a $2>\' . $category->name . \'</a>\',
$text);
}
}
return $text;
}
}
add_filter(\'wp_list_categories\', array(\'singlePostCurrentCat\',\'wp_list_categories\'));