成功进行表单验证并提交后,Wordpress重定向

时间:2010-12-21 22:54:46

标签: wordpress validation forms

我有一个自定义页面模板,其中包含一个表单(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()将在输出启动后吐出。

这样做的最佳方法是什么?

4 个答案:

答案 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']);