首页 文章

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

提问于
浏览
1

我有一个自定义页面模板,其中包含一个表单(page-report.php) .

我对它做了验证,所以我需要动作来导致相同的表单,但我需要在成功验证时重定向到不同的页面 .

wp_redirect()不起作用,因为在输出已经启动后吐出header()函数 .

if($ _ POST ['report']){if($ validator-> ValidateForm())
{
wp_redirect('http:// thankyou')//重定向
}
}

我不能使用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()将在输出启动后吐出 .

我最好的办法是什么?

4 回答

  • 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都可以正常工作 .

    }

  • 0

    我得到了...因为我在管理页面内做了所有事情,所以在wp_redirect()之前已经解决了 Headers ,正如问题中所解释的那样 .

    所以我最终在顶部创建了一个新功能:

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

    这是确保redader_to()函数将在 Headers 之前触发(在admin_init上) . 也许不是最优雅的解决方案,但它完美无缺 .

  • 0

    因此,如果有人在wordpress中寻找“重定向后发布”,这就是你如何做到的:

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

    试试这个

    if( $_POST['report'] ) {
    
        if( $validator->ValidateForm() ) {
            header( 'Location: http://thankyou' ) ;
        }
    }
    

相关问题