将类添加到wp_list_ategories()中的项目

时间:2013-09-24 作者:brunly

我有这个category.php 要显示子类别,请执行以下操作:

<?php if (is_category()) {
  $this_category = get_category($cat);
  if (get_category_children($this_category->cat_ID) != "") {
    echo "<ul>";
    wp_list_categories(\'orderby=id&show_count=0&title_li=
&use_desc_for_title=1&child_of=\'.$this_category->cat_ID);
    echo "</ul>";
  }
}?>
<小时>
<ul>    
<li class="cat-item cat-item-5">
<a>subcategory</a>
    <ul class="children">
    <li class="cat-item cat-item-6"><a>sub-subcategory1</a></li>
    <li class="cat-item cat-item-7"><a>sub-subcategory2</a></li>
    </ul>
</li>
</ul>
是否可以添加具有子类别名称的类?

    <li class="cat-item cat-item-6 sub-subcategory1"><a>sub-subcategory1</a></li>

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

是的,这是可能的。wp_list_categories 接受可以处理此问题的(自定义)walker。

将以下内容放入functions.php 文件:

class Custom_Walker_Category extends Walker_Category {

        function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
                extract($args);
                $cat_name = esc_attr( $category->name );
                $cat_name = apply_filters( \'list_cats\', $cat_name, $category );
                $link = \'<a href="\' . esc_url( get_term_link($category) ) . \'" \';
                if ( $use_desc_for_title == 0 || empty($category->description) )
                        $link .= \'title="\' . esc_attr( sprintf(__( \'View all posts filed under %s\' ), $cat_name) ) . \'"\';
                else
                        $link .= \'title="\' . esc_attr( strip_tags( apply_filters( \'category_description\', $category->description, $category ) ) ) . \'"\';
                $link .= \'>\';
                $link .= $cat_name . \'</a>\';
                if ( !empty($feed_image) || !empty($feed) ) {
                        $link .= \' \';
                        if ( empty($feed_image) )
                                $link .= \'(\';
                        $link .= \'<a href="\' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . \'"\';
                        if ( empty($feed) ) {
                                $alt = \' alt="\' . sprintf(__( \'Feed for all posts filed under %s\' ), $cat_name ) . \'"\';
                        } else {
                                $title = \' title="\' . $feed . \'"\';
                                $alt = \' alt="\' . $feed . \'"\';
                                $name = $feed;
                                $link .= $title;
                        }
                        $link .= \'>\';
                        if ( empty($feed_image) )
                                $link .= $name;
                        else
                                $link .= "<img src=\'$feed_image\'$alt$title" . \' />\';
                        $link .= \'</a>\';
                        if ( empty($feed_image) )
                                $link .= \')\';
                }
                if ( !empty($show_count) )
                        $link .= \' (\' . intval($category->count) . \')\';
                if ( \'list\' == $args[\'style\'] ) {
                        $output .= "\\t<li";
                        $class = \'cat-item cat-item-\' . $category->term_id;


                        // YOUR CUSTOM CLASS
                        if ($depth)
                            $class .= \' sub-\'.sanitize_title_with_dashes($category->name);


                        if ( !empty($current_category) ) {
                                $_current_category = get_term( $current_category, $category->taxonomy );
                                if ( $category->term_id == $current_category )
                                        $class .=  \' current-cat\';
                                elseif ( $category->term_id == $_current_category->parent )
                                        $class .=  \' current-cat-parent\';
                        }
                        $output .=  \' class="\' . $class . \'"\';
                        $output .= ">$link\\n";
                } else {
                        $output .= "\\t$link<br />\\n";
                }
        } // function start_el

} // class Custom_Walker_Category
然后,在中更改代码category.php 像这样:

if (is_category()) {
    $this_category = get_category($cat);
    if (\'\' != get_category_children($this_category->cat_ID)) {
        echo \'<ul>\';
        $args = array(
            \'orderby\' => \'id\',
            \'show_count\' => 0,
            \'title_li\' => \'\',
            \'use_desc_for_title\' => 1,
            \'child_of\' => $this_category->cat_ID,
            \'walker\' => new Custom_Walker_Category(),
        );
        wp_list_categories($args);
        echo \'</ul>\';
    }
}

SO网友:Brady Charron

我知道这个问题由来已久,但我找到了另一个似乎比定制助行器更简单的解决方案,我想把它发布给任何寻求解决方案的人。您可以使用category_css_class 滤器

add_filter( \'category_css_class\', \'add_category_slug_as_class\', 10, 4);

public static function add_category_slug_as_class($css_classes, $category, $depth, $args) {
    $css_classes[] = $category->slug;
    return $css_classes;
}

结束

相关推荐

Get categories without post

我想得到没有帖子的类别。下面是使用post获取类别的sql。。SELECT terms.term_id,terms.name,COUNT(post.ID) FROM wp_posts as post JOIN wp_term_relationships as rel ON post.ID = rel.object_ID JOIN wp_term_taxonomy as ttax ON rel.term_taxonomy_id = ttax.term_taxonomy_id JOI