使用插件将404重定向到其他页面。这就是问题所在。我偶尔会在日志文件中看到:
[08-Apr-2020 14:48:45 UTC] PHP Notice: Trying to get property of non-object in {path}/wp-includes/class-wp-query.php on line 3998
[08-Apr-2020 14:48:45 UTC] PHP Notice: Trying to get property of non-object in {path}/wp-includes/class-wp-query.php on line 4000
[08-Apr-2020 14:48:45 UTC] PHP Notice: Trying to get property of non-object in {path}/wp-includes/class-wp-query.php on line 4002
这显然与此bug有关:
https://core.trac.wordpress.org/ticket/29660
我一直在这样做:
add_action(\'template_redirect\', array($this, \'My_404_Handler\'));
我一直在调用该函数中的is\\u 404()。从bug报告中,它是否返回true或false取决于您何时调用它。在我的例子中,wp包含/class wp查询。php有一个函数get\\u queryed\\u object(),它可以向函数is\\u page()返回空值。问题是,当get\\u queryed\\u object返回null时,is\\u page()只处理对象结果并产生上述错误。
我还查看了服务器日志,无法确定导致此错误的任何特定url请求。
我希望有人对此有一些经验,并能告诉我更改以下代码是否能解决问题?
add_action(\'wp\', array($this, \'My_404_Handler\'));
我正在测试,但由于我不知道如何再现错误,我只是在黑暗中试一试。
谢谢
编辑
404功能
public function My_Plugin_handle404() {
if (is_404()) {
//user set option to show the real 404
if (get_option(\'Show404\') == \'TRUE\') {
include(get_404_template());
} else {
//log the request info to the db and show a blank page with a 200 result
$this->My_Plugin_Process_Request();
status_header(200);
exit;
}
}
}