为了分配current-cat
我们将扩展当前帖子的所有类别wp_list_categories
通过专用Walker
.
假设当前设置如下所示:
$args = array(
\'hierarchical\' => 0,
\'title_li\' => \'\',
\'show_option_none\' => \'\',
);
wp_list_categories($args);
现在我们添加walker(我们将在下一步中设置),以及一个新的参数
highlight
这将提供当前帖子的类别ID数组,并由我们的walker处理。当然,我们还必须填充数组本身。
这导致以下情况:
$highlight = array();
$categories = get_the_category();
foreach ($categories as $category)
$highlight[] = $category->cat_ID;
$args = array(
\'hierarchical\' => 0,
\'title_li\' => \'\',
\'show_option_none\' => \'\',
\'highlight\' => $highlight,
\'walker\' => new TFCategoryWalker(),
);
wp_list_categories($args);
最后一步是步行者本身。基本上,我们采用默认值
Walker_Category
类并添加缺少的内容。因此,我们只需定制
start_el
作用直接在
$class
变量已实例化,我们添加了以下内容:
if (! $highlight) $highlight = array();
elseif (! is_array($highlight)) $highlight = array($highlight);
if (in_array($category->term_id, $highlight)) $class .= \' current-cat\';
就这样。
总之,这是新的walker课程,我们把它放在functions.php
文件:
class TFCategoryWalker 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;
// START customization
if (! $highlight) $highlight = array();
elseif (! is_array($highlight)) $highlight = array($highlight);
if (in_array($category->term_id, $highlight)) $class .= \' current-cat\';
// END customization
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 TFCategoryWalker
References: