因此,我创建了自己的特殊do_parse_request
过滤器,它的运行效果非常好。拦截正确的请求以返回正确的内容,而其他请求继续以其正常的WordPressy方式进行。基本上,我要劫持某些URL,以在普通WordPress路由之外进行一些自定义操作。
除了...尽管内容正确,但响应始终为404。
如果常规请求未完成,是否需要在WordPress中设置一些我缺少的东西?
add_filter('do_parse_request', function($do_parse, $wp) {
//... bunch of code to dynamically determine
//if a page belongs to custom source, which works
if ($ismypage){
remove_action('template_redirect', 'redirect_canonical');
$wp->query_vars['post_type'] = 'my_post_type';
$wp->query_vars['name'] = $mypagename;
return false;
//always a 404, even though I get expected content...
}
return $do_parse;
}
尝试过:
拨弄一下,在返回false之前就看了WP_REST_Response。正在获取:
$testResponse = new WP_REST_Response();
var_dump($testResponse->get_headers());
//empty array
var_dump($testResponse->get_status());
//int 200
在网络上深入研究发现了一种文字status_header
方法。甚至尝试过header("HTTP/1.1 200 Success")
//... right before return false
status_header(200);
//still gets 404 on the page, still gets correct content
header("HTTP/1.1 200 Success");
//same issue
我开始认为这不是我的问题的原因...
答案 0 :(得分:0)
所以...这行得通。并非1000%的人会确定为什么,除了在某些其他东西确定这是404之后必须调用之外,为什么会被调用。因此,可以得到更好的答案,但这至少可以克服404响应...
//right before return false in my do_parse_request filter
do_action( 'template_redirect' );
然后还添加一个模板重定向过滤器,并将其设置为200:
add_filter("template_redirect", function(){
status_header(200);
});