问题wp_INSERT_POST和SAVE_POST筛选器

时间:2011-02-16 作者:Manny Fleurmond

我在使用wp\\u insert\\u post时遇到问题。我正在添加一种类型的帖子创建另一种类型的帖子的功能,其中第一篇帖子作为帖子的父级。我正在使用save\\u posts过滤器测试一些东西。我创建了一个函数,只需创建一个帖子,然后将该函数挂接到save\\u posts过滤器。我遇到的问题是,它正在以指数方式向我的mySQL表中添加帖子。在冻结服务器之前,我让它运行的时间越长,添加的帖子就越多。有更好的方法吗?

示例代码:

public function save() {
    $my_child = array(
                \'post_title\' => $this->_child_type,
                \'post_content\' => "test content",
                \'post_status\' => \'publish\',
                \'post_type\' => "video",
                \'post_parent\'=> 55
              );
    $nindex = wp_insert_post($my_child);
}
add_action(\'save_post\', array(&$this, \'save\'));

3 个回复
最合适的回答,由SO网友:Bainternet 整理而成

您可以检查调用“save\\u post”操作的帖子类型尝试:

public function save() {
global $post;
  if (!$post->post_type = \'video\'){
    $my_child = array(
                \'post_title\' => $this->_child_type,
                \'post_content\' => "test content",
                \'post_status\' => \'publish\',
                \'post_type\' => "video",
                \'post_parent\'=> 55
              );
    $nindex = wp_insert_post($my_child);
  }
}
add_action(\'save_post\', array(&$this, \'save\'));

SO网友:Manny Fleurmond

感谢@BAInternet的解决方案。问题似乎是,因为我正在创建一篇帖子,save函数被调用了两次,因此帖子的数量呈指数级增长。我想到的解决方案是:

public function save() {
    global $post;
    global $flag;
    //Following code makes sure it doesn\'t get executed twice
    if($flag ==0) $flag =1;  
    else return;
    //Next to temporarily disable this filter
    remove_action(\'save_post\', array(&$this, __FUNCTION__));
    $my_child = array(
                \'post_title\' => $this->_child_type,
                \'post_content\' => "test content",
                \'post_status\' => \'publish\',
                \'post_type\' => "video",
                \'post_parent\'=> 55
              );
    $nindex = wp_insert_post($my_child);
    }
    //restore save
    add_action(\'save_post\', array(&$this, __FUNCTION__));
}
add_action(\'save_post\', array(&$this, \'save\'));

SO网友:Dave Amphlett

这可能是因为修订-如果您启用了修订,那么this post 建议故意保存两次—一次用于修订,一次用于实际发布。在那篇文章中的答案(检查class=\'revision\')似乎是最好的解决方案。

结束