从wordpress插件内部重定向


Redirect from within a wordpress plugin

从插件内部进行重定向的正确方法是什么?

在我的插件代码执行的时候,WordPress已经把标题打印出来给浏览器了,所以我不知道怎么可能从插件内部做一个302/301重定向。

我不想做Javascript重定向的原因很明显!

谢谢

如果调用wp_redirect太晚,则可能无法使用它(不确定在执行过程中调用它的位置)。假设这是管理插件页面中的重定向,另一种方法是在缓冲区中捕获输出,这意味着您仍然可以发送标头。我用的一个例子是:

# In your 'admin_menu' callback:
$page_hook = add_options_page('My Plugin', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_options');
add_action( 'load-' . $page_hook , 'my_ob_start');
# Somewhere else in your plugin
function my_ob_start() {
    ob_start();
}

显然可以改变名称等,但这应该允许你在插件页面的任何地方使用header()。但是,它也有一些缺点,默认情况下不会显示错误等,所以使用风险自负。

add_filter('wp_redirect', 'plugin_redirect' , 10, 2);
function plugin_redirect($location, $status) {
   // Your redirect function code here
   return $location;
}

add_filter函数

  • 第二个参数是你的过滤器函数名。
  • 第三个参数是函数的优先级。
  • 第四个参数是过滤器函数接受的参数数量。

wp_redirect过滤器函数接受2个参数