Я установил 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 (в списке сообщений о событиях, перехваченных через первый вызов API выше), чтобы перейти на страницу «Что включено», и на этой странице используйте имя события из URL-адреса в качестве параметра во втором вызове API выше. Но WordPress просто ищет категорию и название поста из-за формата URL, который не существует, поэтому я просто получаю 404.
Что мне не хватает?
Вы должны создать свои собственные конечные точки.
например, если вы хотите отфильтровать все сообщения в определенной категории, вы должны сделать это
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/
Примечание: я написал этот код на лету, что должно потребовать больше усилий для работы.
Других решений пока нет …