WordPress未使用标签/分类无法显示问题及代码咨询
解决WordPress显示所有标签/分类(含未使用)的问题
嘿,我太懂这个痛点了——想把后台创建的所有标签、分类都列出来,但不管怎么试,只显示那些被发布文章关联过的,对吧?先给你拆解下问题根源,再直接给解决方案:
首先,你当前代码里的$posttags是当前文章专属的标签集合,它只会拉取这篇文章绑定过的标签,哪怕你后台堆了一堆未使用的标签,也不会被这个变量获取到。你之前用未发布文章绑定所有标签的思路行不通,因为WordPress默认逻辑里,未发布的文章不算“已使用”标签/分类的依据。
1. 修改标签代码:显示所有标签(含未使用)
把$posttags替换成get_tags()函数,这个函数默认会返回后台创建的所有标签,不管有没有被使用。修改后的完整代码如下:
// 获取所有标签(包括未使用的) $all_tags = get_tags(); foreach($all_tags as $tag) { $tag_name = $tag->name; $input_name = $tag_name . get_the_ID(); echo $tag_name. ': '; echo '<input type="checkbox" name="'. $input_name .'">'; echo str_repeat(' ', 4); }
如果需要筛选标签(比如排除特定ID的标签、按名称排序),可以给get_tags()传参数:
$all_tags = get_tags(array( 'exclude' => array(1, 3), // 排除ID为1、3的标签 'orderby' => 'name', // 按标签名称排序 'order' => 'ASC' // 升序排列 ));
2. 分类的解决方法:显示所有分类(含未使用)
分类的问题和标签类似,默认get_categories()只会返回有已发布文章的分类,所以必须加hide_empty=false参数来强制获取所有分类:
// 获取所有分类(包括未使用的) $all_categories = get_categories(array( 'hide_empty' => false, // 核心参数:不隐藏无文章的分类 'orderby' => 'name', 'order' => 'ASC' )); foreach($all_categories as $category) { $cat_name = $category->name; $input_name = $cat_name . get_the_ID(); echo $cat_name. ': '; echo '<input type="checkbox" name="'. $input_name .'">'; echo str_repeat(' ', 4); }
额外优化:标记当前文章已使用的标签/分类
如果你需要在复选框里标记出当前文章已经绑定的标签/分类,可以加个简单判断:
比如标签的判断逻辑,用has_tag()检查当前文章是否关联了该标签,给复选框加checked属性:
foreach($all_tags as $tag) { $tag_name = $tag->name; $input_name = $tag_name . get_the_ID(); // 判断当前文章是否使用了这个标签 $checked_status = has_tag($tag->term_id) ? 'checked' : ''; echo $tag_name. ': '; echo '<input type="checkbox" name="'. $input_name .'" '. $checked_status .'>'; echo str_repeat(' ', 4); }
分类的话可以用has_category()函数,逻辑完全一致,这样既显示了所有选项,又能直观看到当前文章已选的内容~
内容的提问来源于stack exchange,提问作者erik
相关产品推荐
相关产品推荐

