Пользовательский Wordpress do_parse_request всегда возвращает 404 - PullRequest
0 голосов
/ 06 ноября 2018

Итак, я создал собственный специальный фильтр 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;
}

Пробовал:

Немного ковыряясь, смотрел на WP_REST_Response прямо перед возвратом false. Получение:

        $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 голосов
/ 06 ноября 2018

Так э-э ... это сработало. Не уверен на 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);
});
...