gpt4 book ai didi

wordpress - 从自定义管理页面重定向产生 "Headers already sent"

转载 作者:行者123 更新时间:2023-12-01 00:30:26 24 4
gpt4 key购买 nike

我已经通过 add_submenu_page 在我的插件中注册了一个自定义管理页面。在回调函数(生成管理页面内容的那个)中,我有以下代码:

wp_redirect('http://google.com');
exit;

但是,当我访问管理页面时出现错误:

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

最佳答案

add_submenu_page 的回调发生得太晚(在呈现管理侧边栏和标题之后),这就是无法再发送 location 标题的原因。

为了实现这一点,我们需要在 WordPress 管理区域稍早一点,在发送 header 之前 Hook 一个函数(例如 admin_init)。

一个好办法:

function myplugin_preprocess_pages($value){
global $pagenow;
$page = (isset($_REQUEST['page']) ? $_REQUEST['page'] : false);
if($pagenow=='admin.php' && $page=='myplugin-custom-page-slug'){
wp_redirect('http://google.com');
exit;
}
}
add_action('admin_init', 'myplugin_preprocess_pages');

当您尝试查看 wp-admin/admin.php?page=myplugin-custom-page-slug 时,上述代码会将您重定向到 Google。

就我而言,我已通过 add_submenu_page 将自定义页面附加到管理区域中的默认 (admin.php) 父级,并将自定义页面的 slug 设置为 myplugin -custom-page-slug。如果您有很多自定义管理页面,请随意替换上面代码中的值,甚至添加 PHP switch

通过这种方式,我们已经足够早地 Hook ,以便在查看我们的自定义管理页面时进行重定向。

更新:(另一种方法)

感谢 this post ,我了解到 WordPress 会为每个自定义管理页面创建一个独特的操作(load-{parent_page_slug}_page_{plugin_subpage_slug})。例如,如果您添加了一个带有父 admin.php 和 slug myplugin-custom-page 的自定义管理页面,您可以在方式如下:

add_action( 'load-admin_page_myplugin-custom-page', 'myplugin_custom_page_redirect' );
function myplugin_custom_page_redirect() {
if ( 'myplugin-custom-page' == filter_input( INPUT_GET, 'page' ) ) {
wp_redirect( 'http://google.com' );
exit;
}
}

请注意, Action 名称需要考虑一些事项。它是下划线和破折号的混合,并确保您只包含父页面的名称而不包含扩展名(因此“admin”而不是“admin.php”)

关于wordpress - 从自定义管理页面重定向产生 "Headers already sent",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15064665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com