Wordpress - 在get_the_category_list中向类别添加类

时间:2018-02-15 09:14:28

标签: wordpress categories

我正在使用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替换的情况下解决此问题(或者这是大锤的唯一方法吗?)

2 个答案:

答案 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( ', ' ));