提交表单后WP_REDIRECT不起作用

时间:2012-12-22 作者:Anagio

我在插入帖子后使用此重定向。它不工作,只刷新表单所在的页面。我知道$pid正在获取帖子ID,那么问题是什么?这是我处理表单提交的php代码的最后一部分。

$pid = wp_insert_post($new_post);

update_post_meta($pid,\'domain\',$domain);
update_post_meta($pid,\'keywords\',$keywords);

wp_redirect( get_permalink($pid) );
exit();
这是一个pastebin 完整代码的

使用更好的HTTP重定向其输出,并链接单词here 到新发布的正确帖子。

302 Found
The document has moved here.

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

您只能使用wp_redirect <在将内容发送到浏览器之前。如果要启用php调试,您会看到“headers ready sent”错误,原因是get_header() 在第一行。

不必在模板中处理表单,您可以hook an earlier action, 喜欢wp_loaded, 如果要重定向,请将一些查询保存到db。

EDIT, 示例-

add_action( \'wp_loaded\', \'wpa76991_process_form\' );
function wpa76991_process_form(){
    if( isset( $_POST[\'my_form_widget\'] ) ):
        // process form, and then
        wp_redirect( get_permalink( $pid ) );
        exit();
    endif;
}
使用操作,可以将代码与模板隔离开来。将其与一个短代码结合起来,输出表单并将其全部封装在一个类中,以保存处理/输出之间的状态,您可以在不接触前端模板的情况下完成这一切。

SO网友:s_ha_dum

移动get_header(); 到代码的底部应该可以解决问题。您的代码将在发送任何标头之前执行,重定向将起作用。

// ...
wp_redirect( get_permalink($pid) );
exit();
//insert taxonomies
} 
get_header(); ?>
我想在你发布的页面下面有更多的代码?如果不是,我看不出有必要get_header() 完全

正如米洛所建议的那样,使用钩子的唯一好处是,如果你选择一个足够早的钩子,可能可以避免一些开销。您可以节省几分之一秒的处理时间。

结束

相关推荐