如果您在主题中定义了404页,并且在$ wp_query-> query_vars中定义了“标签”,并且没有与此标签匹配的帖子,则Wordpress将显示404页。

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

我一直在谷歌搜索,阅读代码,阅读Codex,然后在这里闲逛,还无法弄清楚Wordpress在哪里触发了404,以及如何覆盖它。 (我感觉它可能与functions.php中的status_header()有关,但尚不清楚我何时以及何时需要将其钩住。)

任何帮助/想法/启示都值得赞赏。

谢谢您,

〜补丁

#1 楼

经过更多的代码和谷歌搜索搜索之后,我找到了答案。它包含在此线程中(请参阅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逻辑中的一个好主意。

〜补丁

#2 楼

对于一个总是有200页的自定义项目,我需要做同样的事情,发现您还可以将其简单地添加到模板文件的顶部(在get_header();之上)。 br />

评论


大!这对我有用。我正在编写脚本,它生成了404。我尝试从wp-> main尝试运行runnig脚本,但这不是一个完全干净的解决方案。这对我有用://配置require('./ wp-load.php'); //初始化WP(初始化对象,语言和内容)。 wp(); //修复标题(不是404)$ wp_query-> is_404 = false; //无法修正实际的404状态status_header(200); //但这是:-)

– Nux
2012年5月2日,11:45



#3 楼

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

Codex创建错误404页面

评论


我正在寻找一种更改404页面被触发的环境的方法。现在,如果Wordpress在查询变量中找不到任何与标签匹配的帖子,则会显示404页。我想添加一些其他代码,以确保仅在Wordpress找不到任何帖子且我的插件找不到任何要显示的补充信息时才显示404页面。

–补丁
2010-09-15 20:04

404的目的是让访问者知道链接错误,并让您对其进行登录和修复(如果需要)。您既不想告诉访问者他正在使用断开的链接,也不想自己知道。在404上显示信息就可以了,不需要劫持,那么为什么要打扰呢?仅尝试掌握您的逻辑和/或技术。

–稀有
2010-09-16 5:56

我一直在寻找一种方法来更改“错误”页面的定义。我正在构建的网站具有博客组件,但这还不是全部。我正在使用Wordpress标记来显示Wordpress帖子,并通过插件提取其他内容。如果a)有帖子或b)我的插件可以找到要显示的与标签匹配的内容,我想返回200状态代码。因此需要重新布线逻辑。无论如何,谢谢您抽出宝贵的时间写答案-抱歉,我的问题很奇怪,需要一个更复杂的答案:-)

–补丁
2010-09-17 17:25