【问题标题】:How to disable 404 header on specific Wordpress url如何在特定的 Wordpress url 上禁用 404 标头
【发布时间】:2018-01-11 02:25:15
【问题描述】:

我使用此代码将特定 url 重定向到我定制的 Wordpress 主题上的 php 文件:

add_action('wp', function() {
if ( trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/') === 'pagename' ) {
include(locate_template('mysciprt.php'));
exit();
}});

(我知道我可以使用重写规则,但出于几个原因我需要使用此代码)。

这工作很棒。问题是页面仍然有一个 404 状态的 http 标头。这是一个问题有几个原因(其中一些是:seo,post scripts can't be used...)。

我的问题是:有什么办法可以解决吗?

我尝试过的:

我尝试添加:

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

一开始没有帮助,然后我将我的 action('wp'.. 更改为 action('init'... 并且它有效!但问题是我使用'wp' 而不是'init' 的原因是因为我需要在此脚本上使用get_query_var(),而在使用'init' 操作时我不能。

【问题讨论】:

  • 我猜 pre_handle_404 钩子是一个合适的地方来做这件事。 developer.wordpress.org/reference/classes/wp/handle_404
  • 这不是正确的做法。查看 template_include 过滤器。 codex.wordpress.org/Plugin_API/Filter_Reference/…
  • 谢谢。 @CBroe。你能解释一下我应该怎么做才能使用它吗?顺便说一句 - 我更新了一些我尝试过的想法。
  • 查看我链接的方法开头的注释;如果您的过滤器 pre_handle_404 的函数返回 false,那么它会从 404 处跳出处理,因此您应该获得“默认”状态代码 200。

标签: php wordpress url-rewriting http-headers http-status-code-404


【解决方案1】:

最终变得比我想象的更简单:

刚刚添加:

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

先到 script.php 文件本身。

【讨论】:

    【解决方案2】:

    只需发送带有 200 状态代码的标头即可。试试这个:

    header("HTTP/1.1 200 OK");

    【讨论】:

    • 某些东西必须在 404 标头到达您的代码之前发送。在脚本前面检查
    • 顺便说一句,您不需要 wordpress 的 get_query_var() 函数来获取查询变量。您可以通过 $_GET 数组获取它们。
    • 是的,我想这样做,但是 1. 我有很多已经使用它制作的代码(好吧,也许这还不够好:) 2. 恐怕其他事情不会’如果我需要使用可能以相同方式影响的其他功能,将来将无法工作,只是让我感觉不稳定......
    猜你喜欢
    • 1970-01-01
    • 2020-03-04
    • 2016-07-03
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多