2010-12-21 131 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