Пользовательский WordPress do_parse_request всегда возвращает 404

Так что я создал свой собственный специальный 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

Я начинаю думать, что это не причина моей проблемы …

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);
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]