将wp_tag_cloud仅用于具有特殊类的当前帖子标签

时间:2015-05-27 作者:Yuvin Ghotra

我正在尝试不带链接地输出所有标记(自定义分类法),并将特殊类添加到当前的post标记中。例如:如果有10个标签,但当前帖子应用了其中的3个,那么它应该显示所有10个没有链接的标签,但只有3个标签应该有特殊类。

我目前正在使用:

        $terms = get_the_terms( $post->ID, $tax );
        $tag_list = implode(\',\', wp_list_pluck($terms, \'term_id\') );
        wp_tag_cloud( array( \'taxonomy\' => $tax, \'include\' => $tag_list) );
这只是显示带有当前帖子链接的标签。

2 个回复
SO网友:Yuvin Ghotra

我可以通过以下代码实现这一点:

        $allterms = get_terms( $taxonomy );
        $pterms = get_the_terms( $post->ID, $taxonomy);
        $tag_list = implode(\',\', wp_list_pluck($pterms, \'term_id\') );
        $t = explode(\',\', $tag_list);
        echo \'<div class="tag-cloud">\';
        foreach ($allterms as $term)
        {
            if (in_array($term->term_id, $t))
            {
                echo \'<span class="stag active">\'.$term->name.\'</span>\';
            }
            else
            { echo \'<span class="stag inactive">\'.$term->name.\'</span>\'; }
        }
        echo \'</div>\';

SO网友:s_ha_dum

如果通过源代码跟踪代码,您会注意到链接是由get_term_link() 函数中有一个过滤器term_link. 该过滤器的第二个参数包含对象ID,据我所知,该ID仅在标记是当前帖子的一部分时设置。利用这些信息:

function term_link_wpse_189584($termlink, $term) {
//   var_dump($termlink, $term, $taxonomy);
  if (!isset($term->object_id)) {
    $termlink = \'PULL\';
  }
  return $termlink;
}
add_filter(\'term_link\',\'term_link_wpse_189584\',10,2);

function tag_cloud_wpse_189584($return) {
  $pat = \'|<a.*PULL[^>]*>([^<]*)</a>|\';
  $return = preg_replace($pat,\'$1\',$return);
  return $return;
}
add_filter(\'wp_tag_cloud\',\'tag_cloud_wpse_189584\');

$tax = \'post_tag\';
wp_tag_cloud( array( \'taxonomy\' => $tax ));

结束

相关推荐

Get posts with no tags?

我有1000多篇没有标签的帖子。基本上,我尝试在前端显示没有标签的帖子,以便用户可以从前端添加标签。我在循环中使用这种方法,以便显示没有标签的帖子。<?php $tag = get_the_tags(); if (! $tag) { ?> <a href=\"<?php the_permalink();?>\"><?php the_title() ?></a><br>