我有一个自定义页面模板,其中包含一个表单(page-report.php)。
我对它进行了验证,因此我需要采取相应形式的操作,但我需要在成功验证时重定向到其他页面。
wp_redirect()不起作用,因为在输出已经启动后吐出header()函数。
如果($ _ POST [ '报告']) {
if($validator->ValidateForm()) { wp_redirect('http://thankyou') // redirect }
}
我不能使用ob_start()和ob_flush(),因为此页面模板中不包含标题。
我试图在functions.php中添加一个函数:
ADD_ACTION( 'get_header', 'redirect_to的');
function redirect_to($ page){
如果($页)
{
wp_redirect( 'http://www.google.com');
}
}
但是,如果我没有条件if(),那只能起作用。 如果我使用它,wp_redirect()将在输出启动后吐出。
这样做的最佳方法是什么?
答案 0 :(得分:1)
我认为你必须使用save_post钩子:
do_action('save_post','custom_add_save');
function custom_add_save($postID){
// called after a post or page is saved
if($_POST['report']) {
if($validator->ValidateForm())
{
wp_redirect('http://thankyou') // redirect
}
}
您也可以尝试使用插件而不是自己的代码...... Gravity Forms和Contact表单7都可以正常使用。
}
答案 1 :(得分:0)
试试这个
if( $_POST['report'] ) {
if( $validator->ValidateForm() ) {
header( 'Location: http://thankyou' ) ;
}
}
答案 2 :(得分:0)
我明白了...... 由于我在管理页面内做了所有事情,因此在问题中解释了wp_redirect()之前标题已被启动。
所以我最终在顶部创建了一个新功能:
add_action('admin_init','redirect_to');
function redirect_to()
{
if ( isset($_REQUEST['action']) && 'adduser' == $_REQUEST['action'] ) {
wp_redirect($redirect);
die();
}
}
}
这是确保redader_to()函数将在标题之前触发(在admin_init上)。也许不是最优雅的解决方案,但它完美无缺。
答案 3 :(得分:0)
所以在任何人都在寻找"重定向后发布"在wordpress中,你就是这样做的:
wp_redirect($_SERVER['REQUEST_URI']);