首先,这是我第一次在这里发帖。我通常可以根据其他人的回答进行研究,并将所需的代码组合在一起,但这一点让我很困惑。我已经干了差不多一个星期了。
我使用的是标准的wp帖子类型和类别。我有一个名为studio的自定义分类法。有些帖子是在导入过程中自动创建的,我选择了要导入的类别。问题是,导入这些帖子后,我必须返回并手动选择自定义分类法“studio”。studio分类法中也列出了我所列出的一些类别。
我需要获得“类别”;检查是否存在于“studio”分类中;如果是;然后将其添加到该帖子的“studio”分类中。
我尝试了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”分类法添加了一个空白术语。
谢谢你的帮助。
最合适的回答,由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 );
}
}