如何在查看单个帖子时突出显示所有当前类别?

时间:2013-09-28 作者:tfrommen

查看单个帖子时wp_list_categories 通过指定current-cat CSS类。

但是,如果帖子映射到多个类别,则仅标记第一个类别(按层次顺序排列)。

如何分配current-cat 分类至all 职位类别?

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

为了分配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:

结束

相关推荐

WordPress未显示css文件

我遇到了一个疯狂的问题,这让我大吃一惊。我在本地主机上安装了Wordpress并开始开发。我修改了标准的2122主题,并在整个网站(4或5页)中添加了自定义HTML和CSS该网站在我的本地机器上显示得很好(Mac OSX-Safari 6.0.5、Firefox 23.0、Chrome 29.0)。我将我的站点转移到我的实时主机(在GoDaddy下),并通过转储然后导入来迁移数据库。现在,我可以将我的站点拉到本地主机下,也可以转到实时主机URL,而该站点看起来与应该的完全一样。然而,当我通过(browse