如何重定向到 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 管理页面重定向到主页

WordPress用户登录后重定向到指定页面

登录后如何将WordPress用户重定向到上一页

Wordpress登录页面重定向到普通用户的Woocommerce我的帐户页面

html 将WordPress管理员重定向到临时页面。适用于WP安装的迁移/迁移/迁移

wordpress 不断重定向到已删除的页面