wordpress - 从自动标记帖子的功能中排除 WordPress 类别
问题描述
我希望有人能指出我正确的方向,为什么这段代码有效:
/* Auto-tag all posts w/Newsbreak tag to include in Newsbreak RSS feed */
function set_nbrk_tag_on_publish ($post_id, $post) {
if ($post->post_type == 'post' && $post->post_status == 'publish') {
wp_set_post_tags( $post_id, 'newsbreak', true );
}
}
add_action('save_post','set_nbrk_tag_on_publish',10, 2);
但这不会:
/* Auto-tag all posts w/Newsbreak tag (except Obits [-148]) to include in Newsbreak RSS feed */
function set_nbrk_tag_on_publish ($post_id, $post) {
if ($post->post_type == 'post' && $post->post_status == 'publish' && $post->category__not_in == array( 148 ) ) {
wp_set_post_tags( $post_id, 'newsbreak', true );
}
}
add_action('save_post','set_nbrk_tag_on_publish',10, 2);
我无法确定如何自动标记但排除特定类别或类别。我是否需要单独的 if 语句用于类别?我尝试了各种组合
$post->category_in == -148
category_in == -148
category_in array(-148)
等任何指导将不胜感激。
解决方案
这不使用 WP_Query,因此您无权访问对象category__not_in
上的post
属性。
您可以尝试这样的事情(未经测试):
/* Auto-tag all posts w/Newsbreak tag (except Obits [-148]) to include in Newsbreak RSS feed */
function set_nbrk_tag_on_publish ($post_id, $post) {
/* get the category term ids assigned to this post */
$post_cats = wp_get_post_categories( $post_id, ['fields' => 'id' ] );
if ($post->post_type == 'post' && $post->post_status == 'publish' && ! in_array( [148], $post_cats, FALSE ) ) {
wp_set_post_tags( $post_id, 'newsbreak', true );
}
}
add_action('save_post','set_nbrk_tag_on_publish',10, 2);
这基本上检查该术语 id 是否不在数组中。如果不是,它将通过条件。
推荐阅读
- cypress - Expect 失败,但测试通过 cy.on 确认和警报消息
- python - 评估 (False is False) 在特定情况下返回 False
- laravel - 如何使用 API middelware 在 Laravel 上测试 PHPUnit 一个经过身份验证的用户?
- spring-boot - Spring Boot 请求映射最佳实践
- java - 杰克逊确定派生类
- node.js - sls 离线启动,无服务器警告:发现功能不受支持的运行时“nodejs8.10”
- azure - Oozie 协调器无法在基于时间的触发器期间启动工作流
- php - php preg_replace 替换文本文件中的空格
- mysql - 如何在 MySql 中解决这个 GROUP BY 问题?
- java - JPA Criteria API 获取具有特定父属性值的实体