为什么ADMIN_HEAD上的头位置删除了我在该位置中设置的查询变量?

时间:2019-02-25 作者:bigdaveygeorge

我有下面的代码,我想它会加载一个查询变量saved=1的位置。

public function __construct() {

    add_action( \'admin_head\', array( $this, \'test\' ) );

}

public function test() {

    if( $_GET[\'test\'] == 1 ) {

        header( "Location: admin.php?page=my-page&saved=1" );
        exit;

    }

}
我想去:

http://localhost/test/wp-admin/admin.php?page=my-page&test=1

以及要加载的结果页面:

http://localhost/test/wp-admin/admin.php?page=my-page&saved=1

但是查询var被删除了吗?为什么?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

若要执行任何重定向,必须在站点发送任何输出之前发送标头。

admin_head 是一个允许您在其中打印自定义代码的操作<head> 管理站点的标记。但如果它在<head>, 然后一些输出已经发送到浏览器,因此您不能再执行任何重定向。

正如你在这里看到的Actions Run During an Admin Page Request, 这个admin_head 在已打印脚本和样式后调用。

因此,您应该使用在将任何输出发送到浏览器之前触发的挂钩来运行代码。您可以使用wp 例如挂钩。

另一件事是你不应该使用header( "Location: admin.php?page=my-page&saved=1" );. 使用wp_redirect 这样做会更好。