如何重定向到 Wordpress 中的不同管理页面?
Posted
技术标签:
【中文标题】如何重定向到 Wordpress 中的不同管理页面?【英文标题】:How to redirect to different admin page in Wordpress? 【发布时间】:2010-10-04 11:22:26 【问题描述】:我正在编写一个 Wordpress 插件。
我想执行重定向(在从 POST 数据等创建数据库记录之后)到其他 ADMIN 页面。
header("Location: ...) 和 wp_redirect() 都不起作用 - 我明白了
警告:无法修改标头信息 - 标头已由
发送原因很明显。
如何在 Wordpress 中正确执行重定向?
【问题讨论】:
【参考方案1】:对于使用 add_submenu_page(或相关函数)添加的链接,使用返回的 $hook_suffix 将操作添加到“load-$hook_suffix”并在那里进行重定向。这是在输出开始之前挂钩页面加载的方式。
【讨论】:
【参考方案2】:在您的表单操作中,将“noheader=true”添加到操作 URL。这将防止在重定向之前输出管理区域的标题。例如:
<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post">
【讨论】:
...恐怖!我只是浪费了 4 个小时试图克服这个问题!为什么 wordpress 不建议将其添加到 url?谢谢!如果可以的话,我会多投一百次。【参考方案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”
【讨论】:
这应该是最后的手段!【参考方案4】:将其加载到 template_redirect 中。
add_action('template_redirect', 'myplugin_template_redirect');
function myplugin_template_redirect()
wp_redirect('http://www.example.com/', 301);
【讨论】:
template_redirect
不是 WordPress 管理后端中可用的操作挂钩。【参考方案5】:
我认为我做错了。
我的代码在 add_menu_page() 里面 add_action('admin_menu', ...) 调用
这可能会在请求期间稍后调用(在创建并显示页面标题之后)。
将我的代码移到插件句柄之外,进入主范围是有效的 - 它需要一些清理和修复,但重定向有效。
不管怎样,谢谢你的回答。
【讨论】:
【参考方案6】:您需要确保在重定向发生之前没有任何内容发送到 http 输出。
您可以设置“window.location('newlocation');”并且在将输出发送到浏览器后仍然可以重定向。
【讨论】:
尝试设置 window.location 并使用 javascript 进行重定向。 我知道,但输出来自 .../wp-admin/menu-header.php:128 这是一个标准的 wordpress 文件。我可以试试 ob_start + ob_* - 但这似乎有点老套。【参考方案7】:我想你只需要确保 wp_redirect() 在任何输出发送之前就出现了。
【讨论】:
以上是关于如何重定向到 Wordpress 中的不同管理页面?的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress登录页面重定向到普通用户的Woocommerce我的帐户页面