2009-01-30 72 views
10

我正在写一个Wordpress插件。如何在Wordpress中重定向到不同的管理页面?

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

无论是标题(“位置:...),也不wp_redirect()工作 - 我得到

警告:不能更改头信息 - 已经

它来源于明显的原因发送了头

如何正确的WordPress的执行重定向?

回答

37

在您的表单操作,添加“NOHEADER =真”的行动网址。这将防止管理区域的标题在重定向之前被输出。例如:

<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post"> 
0

你需要确保没有被发送到http输出重定向发生之前。

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

+0

尝试设置window.location并使用javascript进行重定向。 – 2009-01-30 13:34:42

+0

我知道,但输出来自.../wp-admin/menu-header.php:128 这是一个标准的wordpress文件。 我可以尝试ob_start + ob_ * - 但是这似乎有点骇人听闻。 – 2009-01-30 13:34:43

0

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

1

我觉得我做错了。

我的代码是内部 ADD_ACTION(“admin_menu”,...)一add_menu_page()调用内

这可能是请求(页头已被创建并显示后)在以后调用。

将我的代码移出我的插件句柄,进入主作用域工作 - 它需要一些清理和修复,但重定向工程。

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

-1

将其加载到template_redirect中。

add_action('template_redirect', 'myplugin_template_redirect'); 

function myplugin_template_redirect() { 
    wp_redirect('http://www.example.com/', 301); 
} 
+0

`template_redirect`不是WordPress管理后台中的可用动作钩子。 – cfx 2014-10-14 04:26:44

2

如果你仍然想同时使用WP add_page *函数然后,处理您的请求后,从您的插件管理页面重定向到另一个管理页面,你可以回应是这样的:

<script type="text/javascript"> 
window.location = '/whatever_page.php'; 
</script> 

这只是呈现一个基于JavaScript的重定向到“/whatever_page.php”,从而确保没有像克里斯巴兰斯已经说过的WP已经发送头的麻烦。

更改“/whatever_page.php”以类似“/wp-admin/admin.php?page=whatever_page”

+0

这应该是最后的手段! – PinoyStackOverflower 2015-01-13 07:23:40

2

对于add_submenu_page(或相关的功能)增加了一个链接,使用返回$ hook_suffix添加一个动作为“负载$ hook_suffix”,并做了重定向那里。这是您在输出开始之前挂钩到页面加载的方式。

相关问题