Добавьте запрос мета-поля в пользовательскую конечную точку API WordPress REST - PullRequest
0 голосов
/ 08 сентября 2018

Я написал пользовательскую конечную точку в мой 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 );
}
...