WORDPRESS
#wordpress#custom-post-type#rest-api#show_in_rest#gutenberg

WordPress: CPT с REST API в теме (functions.php)

Минимальная регистрация Custom Post Type с show_in_rest, rest_base и WP_REST_Posts_Controller. По официальной документации register_post_type().

Как использовать

  1. Вставьте код в wp-content/themes/your-theme/functions.php.
  2. Замените 'item' и 'items' на имя вашего типа и rest_base при необходимости.
  3. После сохранения откройте Настройки → Постоянные ссылки и нажмите «Сохранить». Проверьте: 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.