WordPress REST API nie pozwala mi filtrować według identyfikatora autora, gdy jest wywoływany wewnętrznie, działa zewnętrznie w Postmanie
Obecnie tworzę niestandardowy punkt końcowy interfejsu API dla witryny, którą tworzę, co działa całkowicie dobrze poza tym problemem z identyfikatorami autorów.
Jeśli wykonam żądanie GET do website.local/wp-json/wp/v2/podcasts
zwraca prawidłowy JSON wszystkich podcastów typu niestandardowego postu. Jeśli wykonam żądanie GET do website.local/wp-json/wp/v2/podcasts?author=1
To Również zwraca prawidłowy JSON wszystkich podcastów Niestandardowy typ postu – tutaj nie ma problemów.
Problem jednak pochodzi z innego kodu, który piszę, próbuję to zrobić w funkcji niestandardowej:
$server = rest_get_server();
$podcastsRequest = new WP_REST_Request( 'GET', '/wp/v2/podcasts?author=1');
$podcastsResponse = rest_do_request( $podcastsRequest );
$podcastsData = $server->response_to_data( $podcastsResponse, false );
Kiedy uruchamiam go w Postman, otrzymuję następującą odpowiedź:
{
"code": "rest_no_route",
"message": "No route was found matching the URL and request method.",
"data": {
"status": 404
}
}
Jeśli wykonam to wywołanie wewnętrznie wewnątrz funkcji, działa dobrze:
$server = rest_get_server();
$podcastsRequest = new WP_REST_Request( 'GET', '/wp/v2/podcasts');
$podcastsResponse = rest_do_request( $podcastsRequest );
$podcastsData = $server->response_to_data( $podcastsResponse, false );
Nie mogę zrozumieć, dlaczego powoduje ten błąd, gdy bezpośrednie wywołanie do niego działa dobrze?
EDYCJA: Aby dać więcej kontekstu, jest to funkcja, której używam:
function get_all_posts(WP_REST_Request $request){
$server = rest_get_server();
if($request->get_param('id')){
// $author = $request->get_param('author');
$podcastsRequest = new WP_REST_Request( 'GET', '/wp/v2/podcasts?author=1');
// $articlesRequest = new WP_REST_Request( 'GET', '/wp/v2/articles?author=1');
// $webinarsRequest = new WP_REST_Request( 'GET', '/wp/v2/webinars?author=1');
// $expertInterviewsRequest = new WP_REST_Request( 'GET', '/wp/v2/expert-interviews?author=1');
// $guidesRequest = new WP_REST_Request( 'GET', '/wp/v2/guides?author=1');
} else {
$podcastsRequest = new WP_REST_Request( 'GET', '/wp/v2/podcasts' );
$articlesRequest = new WP_REST_Request( 'GET', '/wp/v2/articles' );
$webinarsRequest = new WP_REST_Request( 'GET', '/wp/v2/webinars' );
$expertInterviewsRequest = new WP_REST_Request( 'GET', '/wp/v2/expert-interviews' );
$guidesRequest = new WP_REST_Request( 'GET', '/wp/v2/guides' );
}
$podcastsResponse = rest_do_request( $podcastsRequest );
$podcastsData = $server->response_to_data( $podcastsResponse, false );
$articlesResponse = rest_do_request( $articlesRequest );
$articlesData = $server->response_to_data( $articlesResponse, false );
$webinarsResponse = rest_do_request( $webinarsRequest );
$webinarsData = $server->response_to_data( $webinarsResponse, false );
$expertInterviewsResponse = rest_do_request( $expertInterviewsRequest );
$expertInterviewsData = $server->response_to_data( $expertInterviewsResponse, false );
$guidesResponse = rest_do_request( $guidesRequest );
$guidesData = $server->response_to_data( $guidesResponse, false );
$merged = array_merge(
$podcastsData,
$articlesData,
$webinarsData,
$expertInterviewsData,
$guidesData,
);
return $merged;
}
add_action('rest_api_init', function () {
register_rest_route( 'wp/v2', '/all-posts', [
'methods' => 'GET',
'callback' => 'get_all_posts',
]);
});
Jak powiedziałem powyżej, jeśli po prostu użyję new WP_REST_Request( 'GET', '/wp/v2/podcasts' );
punktów końcowych, działa dobrze, ale jeśli spróbuję użyć new WP_REST_Request( 'GET', '/wp/v2/podcasts?author=1' );
zwraca ten błąd, pomimo bezpośredniego wywołania do website.local/wp-json/wp/v2/podcasts?author=1
zwracanie wszystkich postów dla autora.