我目前有一个网站,其中包含一系列硬编码类别&子类别,其中每个项目的格式如下:
<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有一个非常基本的把握。谢谢!
答案 0 :(得分:1)
您可以使用自己的类扩展Walker_Category
类,并覆盖函数start_el()
。
如果您使用的课程名称为Walker_MyCategory
,则可以致电wp_list_categories()
,如:
wp_list_categories('walker=Walker_MyCategory')
您也可以自己构建自己的列表。见get_categories()
哦,你的代码没有用,因为$ category没有在任何地方定义。您需要确切地知道它是什么类别。