Тут совсем короткая заметка которая по сути описывает то что есть в официальной документации, но когда я делал это в первый раз то проглядел данный момент.

Создаем кастомный тип и делаем его доступным из REST API

Итак, допустим нам нужно добавить новый кастомный тип "Новости". Для этого в functions.php вашей темы регистрируем его:

// Новости
$labels = array(
    'name'               => 'Новости',
    'singular_name'      => 'Новости',
    'menu_name'          => 'Новости',
    'name_admin_bar'     => 'Новости',
    'add_new'            => 'Добавить',
    'add_new_item'       => 'Добавить новость',
    'new_item'           => 'Новая',
    'edit_item'          => 'Редактировать',
    'view_item'          => 'Просмотр',
    'all_items'          => 'Новости',
    'search_items'       => 'Поиск',
    'parent_item_colon'  => 'Новости',
    'not_found'          => 'Ничего не найдено',
    'not_found_in_trash' => 'Ничего не найдено'
);

$args = array(
    'labels'             => $labels,
    'public'             => true,
    'publicly_queryable' => true,
    'show_ui'            => true,
    'show_in_menu'       => true,
    'query_var'          => true,
    'rewrite'            => false,
    'capability_type'    => 'post',
    'has_archive'        => false,
    'hierarchical'       => false,
    'revision'           => true,
    'show_in_rest'       => true,
    'supports'           => array( 'title', 'thumbnail', 'excerpt', 'editor' ),
    'rewrite'            => array('slug' => 'news'),
);

register_post_type('news', $args);

В данном примере у новости я оставил только заголовок, содержимое, краткое описание и главное изображение.

Ну а где же вся магия из-за чего затевалась данная статья?

Так вот же - 'show_in_rest' => true

Этот параметр по дефолту выключен и свежесозданные типы данных без этой строчки недоступны в API.

Теперь добавляем её и новый роут http://example.com/wp-json/wp/v2/news/ отображается в списке роутов вот тут

http://example.com/wp-json/

Ну и чтоб заметка была не такой короткой поделюсь еще небольшим лайфхаком.

Отображаем ссылку на главное изображение без дополнительного запроса к API

По-умолчанию в API выдается только ссылка на получение данных по изображению. Возьмем предыдущий запрос и выведем список наших новостей - http://example.com/wp-json/wp/v2/news/

В параметре

_links['wp:featuredmedia'][0]['href']

Мы обнаружим ссылку на запрос для получения данных по аттачу.

Например - http://example.com/wp-json/wp/v2/media/118 где 118 это id аттача.

Получается для получения полного поста нам нужно сделать 2 запроса - один для контента и один для картинки.

Но в WP предусмотрен вариант для получения всего сразу. Просто добавляем специальный GET-параметр и получаем данные по изображению в первом запросе.

http://example.com/wp-json/wp/v2/news/?_embed

Предыдущая запись Следующая запись