问题描述
如果您在主题中定义了 404 页面,则如果在 $ wp_query-> query_vars 中定义了”tag”,则 Wordpress 将显示 404 页面,并且没有与该标签匹配的帖子。
我正在编写一个插件,显示每个页面上的一些信息,以及帖子。我想改变 404 逻辑,以便如果没有匹配标签的帖子,并且插件无法拉出与该标签相匹配的任何数据,则 404 页面将被显示。如果插件可以找到数据,我想显示一个正常的页面,不管该页面上是否有帖子…
我一直是谷歌搜索,阅读代码,阅读鳕鱼,并在这里戳,而且还没有能够弄清楚哪些 Wordpress 触发了 404,以及如何覆盖它。 (我有一种感觉,它可能与 functions.php 中的 status_header() 有关,但不清楚如何和何时需要钩住它) 。
任何帮助/想法/启发赞赏。
谢谢,
〜补丁
最佳解决方案
通过代码和谷歌搜索更多的话,我找到了答案。它包含在 this thread 中 (请参阅 Otto42 的帖子),但为了记录,将以下内容添加到插件将覆盖 404 处理您指定的条件:
add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
global $wp_query;
if (<some condition is met>) {
status_header( 200 );
$wp_query->is_404=false;
}
}
请注意,您需要在 PHP 输出标题之前将”is_404″ 设置为 false,这就是为什么在 template_redirect 逻辑中挂接它是一个好主意。
〜补丁
次佳解决方案
我需要为一个总共有 200 页的自定义项目做同样的事情,发现您也可以简单地将其添加到模板文件的顶部 ( get_header() 上面);
global $wp_query;
status_header( 200 );
$wp_query->is_404=false;
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。