不知道你们是否注意过后台Posts -> Tags 列表中的 Count列?这里其实有个问题,那就是,这以列显示的数字只包括’public’类型的post,而没有统计’private’和’draft’类型的post。如果有自己定义的其它类型的post_type,同样也不列入统计。
对于像我这样,存稿和私密都很多的人来说,这样会产生一个问题:在对tag进行维护时,遇到count=0的,并不能判断这个tag已经废弃了,非要点击一次,进到对应的post编辑页面中,看到post列表为空,才能放心地删除这个tag。

对于程序员来说,多点一次也是不乐意的。经过两天的研究,终于被我找到了在taglist中增加列,显示非public post中tag总数的方法。
主要参考的是官方文档(墙ed)
往WP_List_Table类中加列需要两步:加标题和加内容。需要用到两个钩子函数,manage_edit-{$taxonomy}_columns和manage_{$taxonomy}_custom_column。
跟以往经常接触的钩子不同,这俩钩子是带参数的。因为我们针对的修改对象是taglist,所以$taxonomy=post_tag,于是这两个钩子变成了:
manage_edit-post_tag_columns和manage_post_tag_custom_column。
所以这种钩子有种局限性,他们容易随着WP版本的升级而改名。
增加标题的代码:
function edit_post_tag_column_header( $columns ){
$columns['none-public-count'] = 'Non-public Count';
return $columns;
}
add_filter( "manage_edit-post_tag_columns", 'edit_post_tag_column_header', 10);
没任何可说的。
增加内容的代码:
function apip_edit_post_tag_content( $value, $column_name, $tax_id ){
$args = array(
'numberposts' => -1,
'post_type' => 'post',
'post_status' => array('private', 'draft'),
'tag_id' => $tax_id,
);
$myquery = new WP_Query( $args ); //查询类型为private和draft,并且包含tag_id与$tax_id的所有post。
$p_count = 0; //private count
$d_count = 0; //draft count
foreach ($myquery->posts as $p) {
//对两种类型分别计数
if ($p->post_status == 'private') {
$p_count++;
} else {
$d_count++;
}
}
if (0 === $p_count + $d_count) {
return "—";
}
$term_slug = get_term( $tax_id )->slug; //URL需要tag的slug
$ret = "";
$p_str = "";
$d_str = "";
$url_base = home_url('/',is_ssl()?'https':'http').'wp-admin/edit.php?post_type=post';
if ($p_count) {
$p_str = sprintf('privates:%d', $url_base, $term_slug, $p_count); //加编辑用的超链
}
if ($d_count) {
$d_str = sprintf('drafts:%d',$url_base, $term_slug, $d_count);
}
return sprintf(" %s %s", $p_str, $d_str);
}
add_action( "manage_post_tag_custom_column", 'edit_post_tag_content', 10, 3);
这个函数只对第一个函数增加的column有意义。column中增加了不止一项时,要对$column_name进行判断。
中间用了一次WP_Query。很多人对这个类的使用有误解,认为会破坏主循环。这种认知是错误的。WP_Query调用几次都不会影响主循环的检索结果。影响结果的是have_posts()和the_post()!
改完了,看一下效果就一目了,这下可以直接对计数为0且新统计也为0的tag下手了。

我已经放弃对tag的维护了,有点精力全投在文章质量上了,SEO什么的我已经放起来。
倒不是为了SEO,纯是因为强迫症。以及这是另一个想搞的功能的前置。
博主强迫症犯了?哈哈
也不算。我没有很严重的强迫症,这是研究一个新功能的时候附带做出来的。
这是要去除多余的项么?
对。不修改的话,点一次0看没有草稿和私有用也可以删。我就是为了不点这一下。
现在我只求我的博客没有问题就好了,对于这些技术性的东西放弃了。
有这样的精神还是值得点赞的。
职业病的一种。
技术类文章看了眼花,标签为零的文章,其实数量并不为零,这个问题我也早早注意到了,只是懒得弄,毕竟我文章的标签不多。哪天想起来要折腾了,再翻回来找你的经验,哈哈!!
应该还有别的方法,直接把0改成不是0。那样更明显。我还在研究中。
又一个PHP大佬
我是个C/C++程序员。php完全是业余爱好。
瞅了一眼,突然想说大致要不用Emlog吧,这样你折腾我也能搬过去。
不可能。都用了15年了。要换在第3~5年的时候是最容易换的。
最近我在尝试做一个精简版,只给自己用。
这个真不错!
周六测试一个想法就遇到这个问题了,私密的不会统计标签的数量里,最后不得不改成公开的