在当前帖子上添加类;wp_list_ategories

时间:2013-05-02 作者:AndrettiMilas

下面的代码生成当前活动父类别的子类别的子菜单。该代码还生成顶级父类别的子类别,同时查看这些类别中的子类别和帖子。这个.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.

3 个回复
最合适的回答,由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\'));

SO网友:gdaniel

来自wordpress Codex:

current\\u category(integer)允许您强制“current cat”出现在类别存档页上未显示的wp\\u list\\u类别的使用上。通常,当前cat仅在类别存档页面上设置。如果您对它有其他用途,或者希望强制它突出显示不同的类别,这将覆盖函数认为的“当前”类别。此参数在版本2.6中添加

http://codex.wordpress.org/Template_Tags/wp_list_categories

从以下位置更改代码:

wp_list_categories("child_of=$parent&title_li");
收件人:

wp_list_categories("child_of=$parent&title_li&current_category=1");
我在这里试过:

http://wptest.defaria.me/uncategorized/hello-world/

请容忍我,这是一个仅用于测试的WP页面。。因此,您不会看到突出显示的类别,但如果查看源代码,您将看到当前的cat类出现在贴子页面中。我在评论后的页面底部添加了类别循环。

结束

相关推荐

Sort categories by meta value

如何制作一个类别列表,每个类别中有4篇最后的帖子,其中每个类别都按meta\\u值排序。例如,不按meta\\u值排序的模板是http://pastebin.com/AeH6vx9b它仅显示父类别。几天来,我在搜索与类别相关的额外字段,但找不到可行的内容。This is my best search result. 这跟我有什么关系?我不明白。有可能做我想做的事吗?