2010-12-21 144 views
1

我有一个自定义页面模板(page-report.php)。成功的表单验证并提交后,Wordpress重定向

我做了验证,所以我需要的行动导致相同的形式,但我需要重定向到成功验证不同的页面。

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){ if($ page) {
wp_redirect('http://www.google.com'); }

}

但是,这只能如果我没有条件if()。 如果我使用它,wp_redirect()会在输出开始后被吐出。

我的最佳做法是什么?

回答

0

我知道了...... 自从我做的一切,从一个管理页面里面,头是在wp_redirect(),因为它是在问题前面解释解雇了。

所以我结束了在顶部做一个新的功能:

add_action('admin_init','redirect_to'); 
function redirect_to() 
{ 
     if (isset($_REQUEST['action']) && 'adduser' == $_REQUEST['action']) { 
        wp_redirect($redirect); 
        die(); 
       } 
     } 

} 

即确保该redirect_to的()函数将头(上admin_init)之前被解雇了。也许不是最优雅的解决方案,但它是完美的。

+0

'$ redirect`是什么?你还没有定义它 – 2017-11-08 18:23:56

0

试试这个

if($_POST['report']) { 

    if($validator->ValidateForm()) { 
     header('Location: http://thankyou') ; 
    } 
} 
+0

对不起 - 这是行不通的。 wp_redirect()也使用header()。问题是header()需要在页面上显示其他内容之前发生,这就是它失败的原因... – 2010-12-22 17:26:50

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 
      } 

    } 

而且你可以只尝试使用插件,而不是你自己的代码...重力形式和联系表7都工作得很好。

}

+0

我不能使用'save_post',但是您对do_action()是正确的。我会用这个。 – 2010-12-30 01:07:06

0

所以在任何情况下,正在寻找在WordPress“后后重定向”,你这是怎么做到这一点:

wp_redirect($_SERVER['REQUEST_URI']); 
+0

如果你的表单动作是`admin-post.php`,这将失败 – 2017-11-08 18:22:59