WordPress自定义do_parse_request始终返回404

时间:2018-11-06 01:38:25

标签: php wordpress response-headers

因此,我创建了自己的特殊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

我开始认为这不是我的问题的原因...

1 个答案:

答案 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);
});