サブカテゴリを表示するには、これを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>
はい、可能です。 wp_list_categories
これを処理できる(カスタム)ウォーカーを受け入れます。
以下を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>';
}
}
私はこの質問が古いことを知っていますが、カスタムウォーカーよりも簡単だと思われる別の解決策を見つけ、解決策を探している他の人に投稿したいと考えました。 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;
}