仅当帖子具有自定义分类类别时才添加类别

时间:2017-07-06 作者:Lindsay Westcott

我正在尝试将一个类别添加到应用了自定义税务类别的帖子中。如果帖子有自定义税类别,那么它还应该得到一个标准类别。

因此,下面的代码将添加标准类别,但它会将其添加到保存的每个帖子中,而不仅仅是那些具有自定义税务类别的帖子。我做错了什么?

add_action( \'save_post\', \'set_new_category\' );

function set_new_category( $post_id ) {
//Define new category by ID
$new_category = 27;

//Define the custom taxonomy
$em_taxonomy = \'event-category\';

// Get the custom taxonomy category by slug
$old_term = wp_get_post_terms( $post_id, \'building-reservations\', $em_taxonomy );

// Check if post has custom taxonomy category applied
if (!$old_term)

    //If not, don\'t do anything
    return; 

    //Append with the new category
    wp_set_post_categories( $post_id, $new_category, $append = true ); 
}

1 个回复
SO网友:hwl

wp_get_post_terms( $post_id, $taxonomy, $args ) 要求第三个参数是参数数组。

参数

$post\\U id(整数)(可选)post id默认值:0

$分类法(字符串|数组)(可选)要检索术语的分类法。默认为post\\u标记。默认值:“post\\u标记”

$args(array)(可选)覆盖默认值默认值:array

我猜是这样的$old_term 正在设置为wp_get_post_terms WP\\U错误的响应。所以当你检查它时,它总是正确的。

回答

(array | WP\\u Error)分类术语数组,如果未找到术语,则为空数组。如果$taxonomy不存在,则出现WP\\U错误。有关详细信息,请参阅is\\u wp\\u error()。

您可以通过以下方式验证响应是否良好:

if( is_array( $old_term ) && ! empty( $old_term ) ) {
    //do stuff
}
如果你在尝试,请确保帖子中有分类术语building_reservations 根据event_category, 或许类似的方法会奏效:

$old_term = wp_get_post_terms( $post_id, $em_taxonomy );

if( is_array( $old_term ) && ! empty( $old_term ) ) {

    if ( in_array( \'building_reservations\', $old_term ) {

        wp_set_post_categories( $post_id, $new_category, $append = true ); 
    }
}

结束

相关推荐

Categories' hierarchy in URL

我目前正在处理的网站中的帖子都有多个层次分类。例如:Source - Books -- Moby Dick -- Sherlock Holmes 永久链接设置为/%category%/%postname%/. 然而,一篇文章的URL并不包括所有的子类别——我得到的只是site.com/source/books/*postname*, 尽管这篇文章在来源上没有分类,但只在书籍+白鲸上。有人能帮我找出如何调整这种行为吗?非常感谢。