2009-01-30 131 views
10

我正在寫一個Wordpress插件。如何在Wordpress中重定向到不同的管理頁面?

我想執行一個重定向(在從POST數據等創建DB記錄後)到其他ADMIN頁面。

無論是標題(「位置:...),也不wp_redirect()工作 - 我得到

警告:不能更改頭信息 - 已經

它來源於明顯的原因發送了頭

如何正確的WordPress的執行重定向?

回答

37

在您的表單操作,添加「NOHEADER =真」的行動網址。這將防止管理區域的標題在重定向之前被輸出。例如:

<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post"> 
0

你需要確保沒有被髮送到http輸出重定向發生之前。

您可以設置「window.location('newlocation');」,並且在輸出發送到瀏覽器後仍然可以讓您重定向。

+0

嘗試設置window.location並使用javascript進行重定向。 – 2009-01-30 13:34:42

+0

我知道,但輸出來自.../wp-admin/menu-header.php:128 這是一個標準的wordpress文件。 我可以嘗試ob_start + ob_ * - 但是這似乎有點駭人聽聞。 – 2009-01-30 13:34:43

0

我想你只需確保wp_redirect()出現在任何輸出發送之前。

1

我覺得我做錯了。

我的代碼是內部 ADD_ACTION(「admin_menu」,...)一add_menu_page()調用內

這可能是請求(頁頭已被創建並顯示後)在以後調用。

將我的代碼移出我的插件句柄,進入主作用域工作 - 它需要一些清理和修復,但重定向工程。

無論如何,謝謝你的答案。

-1

將其加載到template_redirect中。

add_action('template_redirect', 'myplugin_template_redirect'); 

function myplugin_template_redirect() { 
    wp_redirect('http://www.example.com/', 301); 
} 
+0

`template_redirect`不是WordPress管理後臺中的可用動作鉤子。 – cfx 2014-10-14 04:26:44

2

如果你仍然想同時使用WP add_page *函數然後,處理您的請求後,從您的插件管理頁面重定向到另一個管理頁面,你可以迴應是這樣的:

<script type="text/javascript"> 
window.location = '/whatever_page.php'; 
</script> 

這只是呈現一個基於JavaScript的重定向到「/whatever_page.php」,從而確保沒有像克里斯巴蘭斯已經說過的WP已經發送頭的麻煩。

更改「/whatever_page.php」以類似「/wp-admin/admin.php?page=whatever_page」

+0

這應該是最後的手段! – PinoyStackOverflower 2015-01-13 07:23:40

2

對於add_submenu_page(或相關的功能)增加了一個鏈接,使用返回$ hook_suffix添加一個動作爲「負載$ hook_suffix」,並做了重定向那裏。這是您在輸出開始之前掛鉤到頁面加載的方式。

相關問題