Как пользовательская конечная точка API REST API может возвращать пользовательские данные публикации?

TL; DR: Как выбрать каждый бит информации об ответе пользовательской конечной точки API REST WP?

Длинная версия

Если я хочу создать пользовательскую конечную точку с помощью WP REST API — отправка определенных данных постов из разных типов постов — следуя примеру в руководство, Я получил это:

function custom_endpoint ( $data ) {
$posts = get_posts( array(
'numberposts'   => -1,
'post_type'     => array('event', 'post'),
) );

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

return $posts;
}


add_action( 'rest_api_init', function () {
register_rest_route( 'wp/v1', '/custom-endpoint/', array(
'methods' => 'GET',
'callback' => 'custom_endpoint',
) );
} );

Но функция get_post () не возвращает некоторые данные, которые очень полезны, если вы хотите отображать посты на своей странице (идентификатор категории, рекомендуемое изображение, для примера). Итак, как я могу создать пользовательскую конечную точку, которая возвращает:

  • Заголовок поста
  • Дата публикации
  • Автор сообщения
  • Выдержка
  • Разместить контент
  • Опубликовать Избранные изображения (как Плагин Better Featured Images)
  • Категория публикации
  • Тип сообщения
  • Опубликовать ссылку
  • Другая полезная информация

0

Решение

Основываясь на ответе @fsn, я получил следующую идею: взять объект, который возвращает get_posts (), и добавить к нему новые пропорции, используя другие функции WordPress.

function custom_endpoint ( $data ) {
$posts = get_posts( array(
'numberposts'   => -1,
//Here we can get more than one post type. Useful to a home page.
'post_type'     => array('event', 'post'),
) );


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


$args = array();

foreach ( $posts as $post ) {

//Get informations that is not avaible in get_post() function and store it in variables.
$category = get_the_category( $post->ID );
$img_thumb = get_the_post_thumbnail_url( $post->ID, 'thumbnail' );       // Thumbnail (default 150px x 150px max)
$img_medium = get_the_post_thumbnail_url( $post->ID, 'medium' );          // Medium resolution (default 300px x 300px max)
$img_large = get_the_post_thumbnail_url( $post->ID, 'large' );           // Large resolution (default 640px x 640px max)
$img_full = get_the_post_thumbnail_url( $post->ID, 'full' );            // Full resolution (original size uploaded)

//Adds the informations to the post object.
$post->category = $category;
$post->img_tumb = $img_thumb;
$post->img_medium = $img_medium;
$post->img_large = $img_large;
$post->img_full = $img_full;

array_push($args, $post);
}
return $args;
}
add_action( 'rest_api_init', function () {
register_rest_route( 'wp/v1', '/custom-endpoint/', array(
'methods' => 'GET',
'callback' => 'custom_endpoint',
) );

});

Работает нормально!

Спасибо, @fsn за вклад.

0

Другие решения

Как WP Codex заявляет чтобы получить доступ ко всем данным:

Доступ ко всем данным постов Некоторые данные постов не доступен чтобы получить_посты.

Вы можете получить их по:

$posts = get_posts( array(
'numberposts'   => -1,
'post_type'     => array('event', 'post'),
) );

$response = [];
foreach ( $posts as $post ) {
$response[] = [
'content' => $post->CONTENT.
'title' =>  $post->TITLE,
.....
]
}

return $response; (in a WP way of constructing json responses)
0

По вопросам рекламы [email protected]