10

我正在写一个 Wordpress 插件。

我想执行重定向(在从 POST 数据等创建数据库记录之后)到其他 ADMIN 页面。

header("Location: ...) 和 wp_redirect() 都不起作用 - 我明白了

警告:无法修改标头信息 - 标头已由

这来自明显的原因。

如何在 Wordpress 中正确执行重定向?

4

7 回答 7

40

在您的表单操作中,将“noheader=true”添加到操作 URL。这将防止在重定向之前输出管理区域的标题。例如:

<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post">
于 2011-01-26T20:10:27.887 回答
3

如果您在使用 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”

于 2011-01-04T13:53:48.150 回答
2

对于使用 add_submenu_page(或相关函数)添加的链接,使用返回的 $hook_suffix 将操作添加到“load-$hook_suffix”并在那里进行重定向。这是在输出开始之前挂钩页面加载的方式。

于 2012-04-06T18:56:49.057 回答
1

我想我做错了。

我的代码在 add_action('admin_menu', ...) 调用中的 add_menu_page() 内

这可能会在请求期间稍后调用(在创建和显示页眉之后)。

将我的代码移到插件句柄之外,进入主范围 - 它需要一些清理和修复,但重定向有效。

无论如何,谢谢你的答案。

于 2009-01-30T14:29:01.513 回答
0

您需要确保在重定向发生之前没有任何内容发送到 http 输出。

您可以设置“window.location('newlocation');” 并且在将输出发送到浏览器后仍然可以重定向。

于 2009-01-30T13:28:48.313 回答
0

我想你只需要确保 wp_redirect() 在发送任何输出之前出现。

于 2009-01-30T13:28:54.317 回答
-1

将其加载到 template_redirect。

add_action('template_redirect', 'myplugin_template_redirect');

function myplugin_template_redirect() {  
   wp_redirect('http://www.example.com/', 301);
}
于 2009-05-11T05:16:29.980 回答