如何连接到快速编辑操作?

时间:2014-07-08 作者:Traveler

我发现这个解决方案automatically assign parent terms when a child term is selected, 这对save_post 挂钩:

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

function assign_parent_terms($post_id){
global $post;

if($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_post_terms($post_id, array($term->parent), \'product_cat\', true);
        $term = get_term($term->parent, \'product_cat\');
    }
  }
}
由于我有大量的帖子,我需要quick edit action, 不仅仅是进入保存后操作。

有人能解决这个问题吗?

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我可以看到代码中有两个缺陷。第一个是代码中的一个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\');
    }
  }
}

SO网友:engelen

save_post 实际上,在通过快速编辑功能保存帖子时也会调用。我们从源代码中发现save_post 操作由两个函数调用:wp_publish_postwp_insert_post, 在通过正常过程保存帖子和通过快速编辑过程保存帖子时,都会调用后者!

因此,您当前拥有的代码也可以用于快速编辑!

结束

相关推荐

需要通过Functions.Php注销脚本

嗯,我有点失望Wordpress注销脚本有多么困难。首先,我得到了所有句柄的列表,所以我查找了它,句柄是jquery migrate然后我将其添加到我的函数中。phpwp_dequeue_script(\'jquery-migrate\'); 还有这个wp_dequeue_script(\'jquery\'); 尽管脚本已正确注册,但它什么也不做。版本字符串出了什么问题,我想不出为什么它们仍然包含这些字符串,应该尽快在下一个WP版本中删除,它们只会在某些情况下阻止缓存正确缓存,这很烦人