Так что я создал свой собственный специальный 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
Я начинаю думать, что это не причина моей проблемы …
Так э-э … это сработало. Не уверен на 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);
});
Других решений пока нет …