WordPress: CPT с REST API в теме (functions.php)
Минимальная регистрация Custom Post Type с show_in_rest, rest_base и WP_REST_Posts_Controller. По официальной документации register_post_type().
Как использовать
- Вставьте код в wp-content/themes/your-theme/functions.php.
- Замените 'item' и 'items' на имя вашего типа и rest_base при необходимости.
- После сохранения откройте Настройки → Постоянные ссылки и нажмите «Сохранить». Проверьте: GET /wp-json/wp/v2/items.
Регистрация CPT с поддержкой REST API и редактора блоков (Gutenberg). Параметры show_in_rest, rest_base, rest_controller_class описаны в register_post_type() и в Adding REST API support for custom content types.
Код
<?php
declare(strict_types=1);
add_action('init', static function (): void {
$labels = [
'name' => __('Items', 'your-textdomain'),
'singular_name' => __('Item', 'your-textdomain'),
];
register_post_type('item', [
'labels' => $labels,
'public' => true,
'has_archive' => true,
// REST API и Gutenberg
'show_in_rest' => true,
'rest_base' => 'items',
'rest_controller_class' => WP_REST_Posts_Controller::class,
'supports' => ['title', 'editor', 'excerpt', 'thumbnail'],
]);
});
Замечания
- Для продакшена предпочтительно выносить CPT в mu-plugin, чтобы смена темы не отключала REST-маршрут.
- Если endpoint возвращает 404, проверьте наличие типа в
/wp-json/wp/v2/typesи сбросьте постоянные ссылки.
Подробнее: Как включить CPT в REST API WordPress: /wp/v2 отдаёт 404.