wpnotes.ru wordpress WP Notes

Как добавить поддержку REST API в собственных типах записей WordPress

WordPress REST API — мощный инструмент для взаимодействия с сайтом через HTTP-запросы. По умолчанию, стандартные типы записей, такие как posts и pages, поддерживают REST API. Однако если вы создаёте собственные типы записей (Custom Post Types, CPT), нужно явно включить поддержку REST API, чтобы работать с ними через API.

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

REST API открывает большие возможности для интеграции, мобильных приложений, SPA (Single Page Application) и других внешних систем. Без включения поддержки REST API для CPT вы не сможете получить, создавать, обновлять или удалять записи вашего типа через API. Это ограничивает гибкость и автоматизацию.

Включение REST API позволяет использовать стандартные эндпоинты, например /wp-json/wp/v2/{post_type}, для взаимодействия с вашим CPT.

Как добавить поддержку REST API при регистрации CPT

Самый простой и правильный способ — при регистрации собственного типа записи указать параметр show_in_rest равным true. В качестве примера рассмотрим функцию wpnotes_register_cpt_books, которая регистрирует тип записи «Книги» с поддержкой REST API.

function wpnotes_register_cpt_books() {
    $args = array(
        'label'               => 'Книги',
        'public'              => true,
        'show_in_rest'        => true, // Включаем REST API
        'rest_base'           => 'books', // Базовый endpoint
        'rest_controller_class'=> 'WP_REST_Posts_Controller',
        'supports'            => array('title', 'editor', 'thumbnail'),
    );
    register_post_type('book', $args);
}
add_action('init', 'wpnotes_register_cpt_books');

Здесь параметр show_in_rest отвечает за включение REST API, а rest_base задаёт URL-часть для доступа к API. По умолчанию, если не указать rest_base, он будет совпадать с именем типа записи.

Расширение REST API: добавление пользовательских полей и метаданных

Часто стандартных полей недостаточно, и нужно вернуть через API дополнительные метаданные. Для этого регистрируем мета-поля с поддержкой REST API или добавляем кастомные поля через хук rest_api_init.

Рассмотрим пример регистрации мета-поля author_name для типа записи book с REST поддержкой:

function wpnotes_register_book_meta() {
    register_post_meta('book', 'author_name', array(
        'show_in_rest' => true,
        'single' => true,
        'type' => 'string',
        'description' => 'Имя автора книги',
        'auth_callback' => function() {
            return current_user_can('edit_posts');
        },
    ));
}
add_action('init', 'wpnotes_register_book_meta');

После этого поле author_name будет доступно в JSON-ответе при запросах к REST API, а также его можно будет изменять с помощью PUT/PATCH-запросов.

Добавление кастомных полей через фильтр REST API

Для более сложной логики можно воспользоваться register_rest_field. Например, добавим поле book_summary, которое будет вычисляться динамически:

function wpnotes_register_rest_field_book_summary() {
    register_rest_field('book', 'book_summary', array(
        'get_callback' => function($object) {
            $content = $object['content']['rendered'];
            return wp_trim_words(strip_tags($content), 20);
        },
        'schema' => array(
            'description' => 'Краткое содержание книги',
            'type' => 'string',
            'context' => array('view', 'edit'),
        ),
    ));
}
add_action('rest_api_init', 'wpnotes_register_rest_field_book_summary');

Пример запроса и ответа REST API для CPT с мета-полями

После настройки API можно получить список книг с помощью запроса:

GET https://your-site.ru/wp-json/wp/v2/books

Ответ будет включать стандартные поля и дополнительные, например:

[
  {
    "id": 123,
    "date": "2024-06-01T12:00:00",
    "title": {"rendered": "Моя Книга"},
    "author_name": "Иван Иванов",
    "book_summary": "Краткое содержание книги..."
  },
  ...
]

Полезные плагины для работы с REST API и CPT

Если не хочется писать код вручную, можно использовать плагины:

  • Clearfy Pro — позволяет управлять показом типов записей в REST API, оптимизировать настройки и безопасность.
  • WPRemark — помогает создавать динамические формы и работать с REST API без сложного кода.

Отладка и тестирование REST API для CPT

Для тестирования запросов удобно использовать такие инструменты как Postman, Insomnia или встроенный REST API клиент браузера. Важно проверить права доступа: REST API по умолчанию требует авторизации для создания, обновления и удаления данных.

Для публичного доступа можно настроить права доступа через auth_callback в register_post_meta или фильтры REST API.

Обработка ошибок и безопасность

Обязательно проверяйте права пользователя при работе с REST API. Без этого злоумышленники смогут изменять ваши данные. Используйте nonce, capability checks, и ограничивайте доступ к чувствительным данным.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее