无法从插件注册的管理页面重定向

时间:2013-02-25 作者:Dzhuneyt

我正在插件中执行以下操作:

注册自定义管理页,并在回调函数中(的最后一个参数add_submenu_page)

重定向到另一页

但是,当我打开“自定义管理”页面时,出现以下错误:

Warning: Cannot modify header information - headers already sent by (output started at ..\\wp-admin\\includes\\template.php:1637) in ..\\wp-includes\\pluggable.php on line 878
下面是回调函数:

function myplugin_callback(){
   wp_redirect(\'http://google.com\');
   exit;
}

1 个回复
最合适的回答,由SO网友:Eugene Manuilov 整理而成

您无法重定向到其他页面,因为WordPress已经呈现了管理标题和侧栏模板。如果您真的希望将用户重定向到另一个页面,则需要在呈现标题和侧栏之前提前执行。您可以使用以下结构的操作重定向到另一个页面:

load-{parent_page_slug}_page_{plugin_subpage_slug}
完整代码段:

define( \'WPSE8170_REDIRECT_PAGE_SLUG\', \'wpse8170-redirect-page\' );

add_action(\'admin_menu\', \'register_my_custom_submenu_page\');
function register_my_custom_submenu_page() {
    add_submenu_page( \'tools.php\', \'My Custom Redirect Page\', \'Redirect Page\', \'manage_options\', WPSE8170_REDIRECT_PAGE_SLUG, \'wpse8170_redirect_page_callback\' );
}

function wpse8170_redirect_page_callback() {
    // ...
}

add_action( \'load-tools_page_\' . WPSE8170_REDIRECT_PAGE_SLUG, \'wpse8170_mypage_redirect\' );
function wpse8170_mypage_redirect() {
    if ( WPSE8170_REDIRECT_PAGE_SLUG == filter_input( INPUT_GET, \'page\' ) ) {
        wp_redirect( \'http://google.com\' );
        exit;
    }
}

结束