我正在写一个 Wordpress 插件。
我想执行重定向(在从 POST 数据等创建数据库记录之后)到其他 ADMIN 页面。
header("Location: ...) 和 wp_redirect() 都不起作用 - 我明白了
警告:无法修改标头信息 - 标头已由
这来自明显的原因。
如何在 Wordpress 中正确执行重定向?
在您的表单操作中,将“noheader=true”添加到操作 URL。这将防止在重定向之前输出管理区域的标题。例如:
<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post">
如果您在使用 WP add_page* 函数时仍想从插件管理页面重定向到另一个管理页面,那么在处理您的请求后,您可以回显如下内容:
<script type="text/javascript">
window.location = '/whatever_page.php';
</script>
这只是将基于 javascript 的重定向呈现到“/whatever_page.php”,从而确保 WP 已经发送的标头没有问题,正如 Chris Ballance 已经说过的那样。
将“/whatever_page.php”更改为“/wp-admin/admin.php?page=whatever_page”
对于使用 add_submenu_page(或相关函数)添加的链接,使用返回的 $hook_suffix 将操作添加到“load-$hook_suffix”并在那里进行重定向。这是在输出开始之前挂钩页面加载的方式。
我想我做错了。
我的代码在 add_action('admin_menu', ...) 调用中的 add_menu_page() 内
这可能会在请求期间稍后调用(在创建和显示页眉之后)。
将我的代码移到插件句柄之外,进入主范围 - 它需要一些清理和修复,但重定向有效。
无论如何,谢谢你的答案。
您需要确保在重定向发生之前没有任何内容发送到 http 输出。
您可以设置“window.location('newlocation');” 并且在将输出发送到浏览器后仍然可以重定向。
我想你只需要确保 wp_redirect() 在发送任何输出之前出现。
将其加载到 template_redirect。
add_action('template_redirect', 'myplugin_template_redirect');
function myplugin_template_redirect() {
wp_redirect('http://www.example.com/', 301);
}