有没有什么钩子可以改变404的逻辑?

时间:2010-09-15 作者:Patch

如果您在主题中定义了404页,如果在$wp\\u query->query\\u vars中定义了“tag”,并且没有与该标记匹配的帖子,Wordpress将显示404页。

我正在编写一个插件,在每个页面上显示一些信息,以及帖子。我想更改404逻辑,以便在没有与标记匹配的帖子时显示404页面,并且插件无法提取与该标记匹配的任何数据。如果插件可以找到数据,我想显示一个正常的页面,无论该页面上是否有帖子。。。

我一直在谷歌上搜索、阅读代码、阅读抄本,并在这里到处乱翻,但我还没有弄清楚Wordpress在哪里触发了404,以及如何覆盖它。(我觉得这可能与函数中的status\\u header()有关。php,但尚不清楚如何以及何时需要连接到它)。

感谢您的帮助/想法/启示。

非常感谢。

~补丁

3 个回复
最合适的回答,由SO网友:Patch 整理而成

在对代码进行了一番苦读和google搜索之后,我找到了答案。它包含在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\\u 404”设置为false,这就是为什么将其挂接到template\\u重定向逻辑中是一个好主意。

~补丁

SO网友:noinput

我需要对一个始终有200页的自定义项目执行同样的操作,并且发现您也可以简单地将其添加到模板文件的顶部(上面的get\\u header();)

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;

SO网友:Rarst

创造404.php 模板文件,并根据需要进行自定义(添加插件输出或其他)。您提到主题中定义的,这种方法对您来说到底有什么错?

法典Creating an Error 404 Page

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?