Wordpress API - ссылка на полную информацию из списка сообщений

Я установил Wordpress API на один из веб-сайтов нашей компании, чтобы мы могли получать с него данные для отображения на новом веб-сайте компании. Что касается захвата и отображения исходных данных, все работает нормально (сообщения из определенной категории с исходного веб-сайта на определенную страницу на новом веб-сайте).

Это для событий, которые вводятся на странице "что на" на существующем веб-сайте, которые происходят в баре / ресторане. Новый сайт предназначен исключительно для событий, и для того, чтобы добавить / изменить события на обоих сайтах, мы решили, что лучше всего использовать API.

Чтобы получить полный список событий (который работает), я использую:

$response = wp_remote_get( 'http://restuarantdomain.com/wp-json/wp/v2/posts?filter[category_name]=live-events&per_page=50' );

Я также знаю, что для отображения отдельного поста мне нужно использовать:

$response = wp_remote_get( 'http://restaurantdomain.com/wp-json/wp/v2/posts?filter[name]=event_name );

Что я не могу понять, как это сделать, так это создать "дружественный" URL-адрес на новом сайте, который затем перейдет на страницу, на которой вызывается функция, чтобы получить индивидуальные сведения о публикации.

Например, я хочу, чтобы URL http://eventdomain.com/whats-on/event-name (в списке сообщений о событиях, перехваченных через 1-й вызов API выше) перешел на страницу "Что включено" и на этой странице использовал событие -name из URL-адреса в качестве параметра во втором вызове API выше. Но Wordpress просто ищет категорию и название поста из-за формата URL, который не существует, поэтому я просто получаю 404.

Что мне не хватает?

1 ответ

Вы должны создать свои собственные конечные точки.

например, если вы хотите отфильтровать все сообщения в определенной категории, вы должны сделать это

function my_cat_func( $data ) {
    $posts = get_posts( array(
        'cat' => $data['id'],
    ) );

    if ( empty( $posts ) ) {
        return null;
    }

    return $posts[0]->post_title;
}

тогда вы должны добавить действие для регистрации вашего вызова конечной точки

add_action( 'rest_api_init', function () {
    register_rest_route( 'myplugin/v2', '/categoy/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'my_cat_func',
    ) );
} );

тогда вы получите что-то вроде этого

http://example.com/wp-json/myplugin/v2/categoy/(?P<id>\d+)

для получения дополнительной информации и лучшего понимания, я предлагаю вам прочитать эту ссылку: http://v2.wp-api.org/extending/adding/

Эта статья также может дать вам больше примеров: https://webdevstudios.com/2015/07/09/creating-simple-json-endpoint-wordpress/ и https://deliciousbrains.com/wp-rest-api-customizing-endpoints-adding-new-ones/

Примечание: я написал этот код на лету, что должно потребовать больше усилий для работы.

Другие вопросы по тегам