SAVE_POST+INSERT_POST=无限循环

时间:2011-11-23 作者:ptriek

我试图在保存包含某个自定义字段的帖子时自动创建一篇新帖子-将insert\\u post函数挂接到save\\u post中。

这将生成一个无限循环。

我找到了这个问题的一些答案,建议在插入之前检查帖子类型。

然而,下面的代码仍然给出了一个无限循环,有什么想法吗?

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

function createGallery () {
    global $post;
    if ( $post->post_type == \'activity\' ) {
        $gallerypost = array(
            \'post_content\' => \'the text of the post\',
            \'post_status\' => \'publish\', 
            \'post_title\' => \'Photo album\', 
            \'post_type\' => \'post\', 
            \'post_author\' => 1);  
        wp_insert_post( $gallerypost );
    }
}

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这是因为你第一次绕圈子$post 是当前帖子。但是,第二次循环时,$post没有改变。同样的事情发生在第三、第四、第五等

因为$post变量是该页面的当前帖子,而不是您刚刚保存/插入的帖子,所以if语句的循环总是true,并且需要无限循环。而不是检查$post 变量,则应检查正在保存的帖子的ID。如果我们查看执行操作的调用save_post:

do_action(\'save_post\', $post_ID, $post);
我们现在看到save\\u post有参数!!因此,如果我们在添加时指示函数接受1个参数:

add_action(\'save_post\', \'createGallery\',1,1);
然后添加post ID参数并使用该参数:

function createGallery ($post_ID) {
    if ( get_post_type($post_ID) == \'activity\' ) {
        $gallerypost = array(
            \'post_content\' => \'the text of the post\',
            \'post_status\' => \'publish\', 
            \'post_title\' => \'Photo album\', 
            \'post_type\' => \'post\', 
            \'post_author\' => 1);  
        wp_insert_post( $gallerypost );
    }
}
那么你的无限循环应该消失了!如果不是这样的话,那么您已经朝着使代码更准确的方向迈出了相当大的一步,因为您现在正在处理正确的数据。

我要警告你\'post_type\' => \'post\',\'post_type\' => \'activity\', 将重新引入无限循环。

结束

相关推荐

与Loop不同,Get_Page()返回不带html标记的POST内容。我怎么才能解决这个问题?

get\\u page()不像循环那样返回没有html标记的帖子内容。我需要标签。我怎样才能解决这个问题?我不想更改所见即所得编辑器,这是一个糟糕的解决方案http://wordpress.org/support/topic/preserve-html-with-get_pages