在“parse_Query”操作中触发“Headers Always Sent”错误

时间:2018-08-05 作者:Nathan Arthur

我已将此代码注册到“parse\\u query”操作,该操作尝试根据API资产的可用性触发404。我的实现基于this answer 另一个问题。

public function throw404($query)
{
    if ($this->avorgApi->getPresentation($query->get("presentation_id"))) return;

    $query->set_404();
    $this->wp->call("status_header", 404);
}
($this->wp->call(...) 只是一个简单的包装器对象,它允许我删除并监视对WordPress的调用。它称为status_header 函数,就像我直接调用它一样。)

这个throw404() 函数在对象的__construct() 方法,如下所示:

$this->wp->call("add_action", "parse_query", [$this, "throw404"]);
当请求的资产丢失并且404被触发时,我得到以下错误:

无法修改标题信息-标题已发送

我发现可以通过注释掉函数中倒数第二行来防止出现错误($query->set_404();), 但也没有抛出404,这违背了目的。

如何解决此问题?

1 个回复
最合适的回答,由SO网友:Nathan Arthur 整理而成

我想出来了。基本上,问题是我还注册了一个URL重写page_id 作为查询变量,它覆盖404并加载引用的页面。我通过将此行添加到throw404() 功能:

unset($query->query_vars["page_id"]);

结束

相关推荐

Headers already sent by

Warning: Cannot modify header information - headers already sent by (output started at /forums/vb/search/searchcontroller/version.php:91) in /wp-includes/functions.php on line 862 我不知道这个错误意味着什么。有人能帮帮我吗?函数第862行。php是。。。setcookie( \'wp-settings-time-\'