我已将此代码注册到“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,这违背了目的。
如何解决此问题?
最合适的回答,由SO网友:Nathan Arthur 整理而成
我想出来了。基本上,问题是我还注册了一个URL重写page_id
作为查询变量,它覆盖404并加载引用的页面。我通过将此行添加到throw404()
功能:
unset($query->query_vars["page_id"]);