WP_INSERT_POST在502错误网关中同时保存POST结果

时间:2014-09-05 作者:Domenic Fiore

我目前正在尝试创建/更新一篇帖子,同时保存我当前的帖子。一切都发生在这里:

add_action(\'save_post\', \'wysiwyg_save_meta\');
function wysiwyg_save_meta(){
    global $post;
    $editor_id = WYSIWYG_EDITOR_ID;
    $meta_key = WYSIWYG_META_KEY;

    if(isset($_REQUEST[$editor_id])) {
        update_post_meta($post->ID, WYSIWYG_META_KEY, $_REQUEST[$editor_id]);

        $thankYouPost = get_thank_you_post($post->ID);

        $postArgs = array(
            \'post_content\'   => $_REQUEST[$editor_id], 
            \'post_name\'      => \'thank-you\',
            \'post_title\'     => "Thank You",
            \'post_status\'    => $post->post_status,
            \'post_type\'      => \'landing_page\',
            \'post_parent\'    => $post->ID,
        );

        if ($thankYouPost->ID) {
            $postArgs[\'ID\'] = $thankYouPost->ID;
        }
        wp_reset_postdata();
        wp_reset_query();
        wp_insert_post($postArgs);
        wp_reset_postdata();
        wp_reset_query();
    }
}
现在,这可以工作并保存两个页面,但看起来它实际上并不工作。页面只是停留并尝试加载,最终我返回502错误网关。但是,手动刷新页面会显示操作成功。

这可能是什么原因造成的?我很乐意提供更多信息。感谢您抽出时间。

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

正如奥托所指出的,这将导致一个无限循环。解决方案是在执行wp\\u insert\\u post之前先将函数解钩,然后再将其挂回。

remove_action(\'save_post\', \'wysiwyg_save_meta\');
wp_insert_post($postArgs);
add_action(\'save_post\', \'wysiwyg_save_meta\');

SO网友:Otto

不想指出明显的问题,但:

add_action(\'save_post\', \'wysiwyg_save_meta\');
function wysiwyg_save_meta(){
...
        wp_insert_post($postArgs);
...
}
这是一个无限循环。

在wp\\u insert\\u post的末尾调用save\\u post操作。因此,您只是在循环,在调用函数的过程中挖了一个越来越深的洞,然后一遍又一遍地执行wp\\u insert\\u post,直到耗尽所有可用内存或进程超时为止。

结束

相关推荐