如果帖子有类别,则自动添加分类

时间:2021-04-28 作者:The Horse Back Street Choppers

首先,这是我第一次在这里发帖。我通常可以根据其他人的回答进行研究,并将所需的代码组合在一起,但这一点让我很困惑。我已经干了差不多一个星期了。

我使用的是标准的wp帖子类型和类别。我有一个名为studio的自定义分类法。有些帖子是在导入过程中自动创建的,我选择了要导入的类别。问题是,导入这些帖子后,我必须返回并手动选择自定义分类法“studio”。studio分类法中也列出了我所列出的一些类别。

我需要获得“类别”;检查是否存在于“studio”分类中;如果是;然后将其添加到该帖子的“studio”分类中。

第四类苹果跳过桃子表d> 跳过
我尝试了Autotager插件,但它只在标题、帖子和摘录中搜索提供的术语。我也尝试了很多代码,但都没有成功。

这是我的部分作品,但没有添加“类别”。它将单词category添加到“studio”分类法中。

add_action( \'save_post\', \'studio_code_save_post\', 10, 2 );
function studio_code_save_post( $post_ID, $post ) {
     $post_categories = get_the_terms( $post->ID, \'category\' );
     if ( \'post\' != $post->post_type || wp_is_post_revision( $post_ID ) )
          return;
     wp_set_object_terms( $post_ID, \'category\', \'studio\' );
} 
如果我改变

wp_set_object_terms( $post_ID, \'category\', \'studio\' );

wp_set_object_terms( $post_ID, $post_categories, \'studio\' );
它为“studio”分类法添加了一个空白术语。

谢谢你的帮助。

1 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

下面是一个(未经测试的)示例,介绍如何获取保存的帖子的类别,检查它们是否存在于其他分类法中,以及帖子中存在的术语。而不是泛型save_post 操作您可以使用特定于post类型的操作,save_post_{post_type}. 如果要防止每次保存/更新帖子时都运行检查,可以利用钩子提供的第三个参数,它告诉您是新帖子或现有帖子的操作。

// hook to post type specific save action
add_action( \'save_post_post\', \'studio_code_save_post\', 10, 3 );
function studio_code_save_post( $post_ID, $post, $update ) {
    if ( wp_is_post_revision( $post ) ) {
        return;
    }

    // uncomment to prevent code running on post update
    // if ( $update ) {
    //  return;
    // }

    $categories = get_the_terms( $post, \'category\' );
    $studio_terms = array();
    if ( $categories && is_array($categories) ) {
        foreach ($categories as $category) {
            // check, if the term exists in another taxonomy
            if ( term_exists( $category->slug, \'studio\' ) ) {
                $studio_terms[] = $category->slug;
            }
        }
    }   

    if ( $studio_terms ) {
        // append terms to post
        wp_set_object_terms( $post_ID, $studio_terms, \'studio\', true );
    }
}