WordPress 后端开发中出现已提交 header 警告的解决方案
在开发 WordPress 后端程序时,有时会遇到已提交 header 的问题。很多时候这是因为在PHP中发送HTTP头后我们使用wp_redirect函数来跳转到页面,wp_redirect函数也是通过发送HTTP头给浏览器来实现页面跳转的。
已经发送的 headers 出现问题的原因
我们知道,同一个 http 请求中只能发送一个 http header 到浏览器,所以对于之前发送过的 HTTP header,wp_redirect 函数会重新发送对 HTTP 标头的请求。必须无法接受。在 HTTP 中,请求就像水一样发送,无法修改。为了及时发现并解决这个问题,PHP会在启动时通知我们有问题,让我们检查。 。
这个问题并不是致命错误,它只是让部分程序失效,所以即使我们不解决,直接关闭警告显示也没关系,但作为一个负责任的程序员,即使是警告级别错误,我们必须解决它以确保程序的准确启动。
如何解决已经发送的 header 的问题
为了能够跳转到页面,我们只能提前向浏览器发送 header 请求。我们来看一段代码。以下代码安装在 admin_init 挂钩上,并在 WordPress 管理界面初始化后执行。代码的主要功能是判断当前页面以及操作类型。如果操作类型满足一定的条件,就会进行一些数据处理和跳转操作。
add_action('admin_init', function ()
{
if (isset($_GET[ 'page' ]) && $_GET[ 'page' ] === 'list_serial' && isset($_GET[ 'action' ]) && $_GET[ 'action' ] === 'delete') {
$ids = isset($_GET[ 'serial' ]) ? (array)$_GET[ 'serial' ] : [];
$sendback = remove_query_arg(['trashed', 'untrashed', 'deleted', 'locked', 'ids'], wp_get_referer());
wp_redirect(add_query_arg(['trashed' => count($ids), 'ids' => join('_', (array)$ids), 'locked' => 1], $sendback));
exit;
}
});
此代码取自使用 WP_List_Table 类创建的页面。删除列表中的部分数据后,会跳回数据列表页面,显示删除成功。运行WP_List_Table后,页面已经初始化。当执行WP_List_Table中的清除数据方法时,必须发送HTTP标头。如果您在此类中实现删除后跳转操作,您将遇到已发送的标头通知。 。所以我们需要跳出这个类,在页面初始化之前判断页面是如何工作的以及是否必须跳转。
上面的代码是在WordPress管理后台的操作。你也会在 WordPress 前端遇到这个问题。您可以参考上面的代码来解决这个问题。只需将钩子替换为前端初始化的钩子即可。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。