【发布时间】: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