如何在WordPress文章自动打标签函数中排除指定分类
问题根因
category__not_in、category_in都是WordPress中WP_Query查询类的专用参数,不属于WP_Post对象的原生属性,直接通过$post->调用不存在的属性,永远无法得到有效值,所以判断条件不触发,代码不生效。- 你尝试的几种分类判断写法都用错了语法,WordPress有原生函数可以直接判断文章所属分类,不需要自己写属性判断。
正确实现代码
/* Auto-tag all posts w/Newsbreak tag (except Obits [ID=148]) to include in Newsbreak RSS feed */ function set_nbrk_tag_on_publish ($post_id, $post) { // 仅对已发布的文章类型生效,且排除ID为148的分类 if ($post->post_type == 'post' && $post->post_status == 'publish' && !has_category( 148, $post_id ) ) { wp_set_post_tags( $post_id, 'newsbreak', true ); } } add_action('save_post','set_nbrk_tag_on_publish',10, 2);
代码说明
- 这里用了WordPress原生函数
has_category(),第一个参数填要排除的分类ID/别名/名称,第二个参数填文章ID,就可以直接判断当前文章是否属于指定分类。 - 前面加
!就是取反,也就是不属于148分类的时候才执行加标签的逻辑。 - 如果你后续要排除多个分类,把第一个参数换成数组即可,比如
!has_category( [148, 152, 169], $post_id )。 - 如果要判断的是自定义分类法,替换成
has_term()函数即可,用法和has_category()类似,第三个参数填自定义分类法的别名。
内容的提问来源于stack exchange,提问作者user17150429
相关产品推荐
相关产品推荐

