是否有任何钩子会改变404逻辑?


27

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

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

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

任何帮助/想法/启示表示赞赏。

谢谢,

〜补丁

Answers:


29

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

〜补丁


5

我需要对始终有200页的自定义项目执行相同的操作,发现您还可以将其简单地添加到模板文件的顶部(在get_header();之上)。

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

1
大!这对我有用。我正在编写脚本,并且生成了404。我尝试从wp-> main尝试运行runnig脚本,但这并不是一个真正的解决方案。这对我// configuration require('./wp-load.php'); // init WP (inits objects, language and stuff). wp(); // fix title (this is not 404) $wp_query->is_404 = false; // doesn't fix the actual 404 status status_header( 200 ); // but this does :-)
有用

1

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

Codex 创建错误404页面


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

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

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