我正在使用get_the_category_list()
返回帖子类别的链接列表。我想确定两个(下面的ID 6和7)并给它们分类。
我用过滤器来识别它们;
add_filter('the_category_list', 'category_flags');
function category_flags($categories) {
$category_flags = array (6, 7);
if (!empty($categories) && is_array($categories)) {
foreach ($categories as $key => $category) {
if (in_array($category->term_id, $category_flags)) {
$category->class = "flag";
//var_dump ($category);
}
}
}
return $categories;
}
但由于找不到get_the_category_list的过滤器,因此我没有再进一步了。
如何在不使用PHP替换的情况下解决此问题(或者这是大锤的唯一方法吗?)
答案 0 :(得分:0)
我的答案,我的大锤,就是重写get_the_category_list()
因此;
function wp15022018_get_the_category_list( $separator = '', $parents = '', $post_id = false ) {
global $wp_rewrite;
$categories = apply_filters( 'the_category_list', get_the_category( $post_id ), $post_id );
$rel = ( is_object( $wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"';
$thelist = '';
$i = 0;
foreach ( $categories as $category ) {
if ( 0 < $i )
$thelist .= $separator;
$thelist .= '<a href="' . get_category_link( $category->term_id ) . ' " class="'.$category->class. '" ' . $rel . '>' . $category->name.'</a>';
++$i;
}
return $thelist;
}
我在原始问题中使用过滤器来识别感兴趣的类别。我的类别是平的,所以我已经大大简化了功能,虽然没有必要。
我已将此留在此处,因为在我看来,有很多原因可能会导致人们希望修改本机类别列表输出。我没有将此标记为答案,因为有人聪明可能会提出一种更简单的方法。
答案 1 :(得分:0)
为什么不仅仅使用PHP的preg_replace
函数在开始的定位标记之后插入class属性?无需重写功能。
$categories_list = preg_replace('/<a /', '<a class="my-class"', get_the_category_list( ', ' ));