首页 > 解决方案 > 从自动标记帖子的功能中排除 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)

等任何指导将不胜感激。

标签: wordpress

解决方案


这不使用 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 是否不在数组中。如果不是,它将通过条件。


推荐阅读