我可以看到代码中有两个缺陷。第一个是代码中的一个bug
if($post->post_type != \'product\')
如果不存在post,则会出现以下错误
注意:正在尝试获取非对象的属性。。。
这可以通过首先检查帖子isset
if(isset($post) && $post->post_type != \'product\')
其次,
wp_set_post_terms()
不应用于自定义帖子类型上的自定义分类,正确的函数应为
wp_set_object_terms()
. 从codex页面
此函数仅适用于本机post类型。对于自定义帖子类型上的分类,请使用wp_set_object_terms()
因此,您的代码应该如下所示
add_action(\'save_post\', \'assign_parent_terms\');
function assign_parent_terms($post_id){
global $post;
if(isset($post) && $post->post_type != \'product\')
return $post_id;
// get all assigned terms
$terms = wp_get_post_terms($post_id, \'product_cat\' );
foreach($terms as $term){
while($term->parent != 0 && !has_term( $term->parent, \'product_cat\', $post )){
// move upward until we get to 0 level terms
wp_set_object_terms($post_id, array($term->parent), \'product_cat\', true);
$term = get_term($term->parent, \'product_cat\');
}
}
}