Я написал пользовательскую конечную точку в мой WordPress REST API, зарегистрировавшись с кодом ниже:
register_rest_route( 'v1/app', '/matches(?:/(?P<id>\d+))?', array(
array(
// By using this constant we ensure that when the WP_REST_Server changes, our readable endpoints will work as intended.
'methods' => WP_REST_Server::READABLE,
'callback' => 'matches_equal_get_details',
'args' => [
'appID'
],
),
) );
Однако я не могу заставить конечную точку выполнить запрос, когда добавляю поле метаданных appID, которое я анализирую из пользовательского типа записи. Я хочу написать что-то вроде
domain/wp-json/v1/app/matches?appID=5b880ecbf5d3aa1e219e0e6b
и возвращает только сообщение с соответствующим мета-значением, как в URL. Мне удалось получить полный список всех сообщений, но мне нужно только одно, в котором метаданное appID совпадает с метаданным в URL.
function matches_equal_get_details( $request ) {
$posts = get_posts( array( 'post_type' => 'sp_event', 'orderby' => 'post_date', 'post_status' => 'publish' , 'numberposts' => -1 ) );
if ( empty( $posts ) ) {
return null;
}
//var_dump($posts);
foreach ($posts as $post) :
setup_postdata( $post );
if( $request == get_post_meta( $post->ID, 'tsl_appID_link_meta_value_key', true ) ) {
//Get attachment images
$images = get_attached_media('image', $post->ID);
$imagesList = [];
foreach ($images as $image) {
$imagesList[] .= wp_get_attachment_image_src($image->ID,'full')[0];
}
$details[] = array(
'ID' => $post->ID,
'appID' => get_post_meta( $post->ID, 'tsl_appID_link_meta_value_key', true ),
'match' => $post->post_title,
'MediaImages' => $imagesList,
'MatchDay' => get_post_meta( $post->ID, 'sp_day', true )
);
}
endforeach;
wp_reset_postdata();
return rest_ensure_response( $details );
}