Wordpress - 困惑,试图使用add_filter来自定义wp_list_categories

时间:2010-08-28 15:25:49

标签: php wordpress wordpress-theming

我目前有一个网站,其中包含一系列硬编码类别&子类别,其中每个项目的格式如下:

<li class="cat-item open-access"><a href="/categories/open-access/">Open Access</a></li>

重要的是,每个<li>项都会被分配一个类,该类与链接到其中的类别的slug相匹配。

我显然希望使用Wordpress'wp_list_categories()输出列表而不是硬编码,但需要为每个<li>项保留自定义类。

我一直在研究过滤器和操作,并认为我可能会通过将其添加到我的主题functions.php文件中来解决问题:

function add_class_from_slug($wp_list_categories) {
        $pattern = '/class=\"/';
        $replacement = 'class="'.$category->slug.' ';
        $newclass = preg_replace($pattern, $replacement, $wp_list_categories);
        return $newclass;
}
add_filter('wp_list_categories','add_class_from_slug');

但这不起作用 - $category->slug返回的文本在呈现页面时会消失。如果我添加静态文本(使用类似$replacement = 'class="myclass ';的行,则呈现正常。

令人沮丧的是,我可以通过添加$class .= ' '.$category->slug;来获得我想要的输出  在正确的地点wp-includes/classes.php,但我想避免诉诸于此。

为什么我不能在我的函数中使用$category->slug?解决方法,建议,进一步阅读这个主题?应该补充一点,我对PHP有一个非常基本的把握。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用自己的类扩展Walker_Category类,并覆盖函数start_el()

如果您使用的课​​程名称为Walker_MyCategory,则可以致电wp_list_categories(),如:

wp_list_categories('walker=Walker_MyCategory')

您也可以自己构建自己的列表。见get_categories()


哦,你的代码没有用,因为$ category没有在任何地方定义。您需要确切地知道它是什么类别。