Как использовать REST API в WordPress для создания настраиваемых запросов

REST API в WordPress — мощный инструмент, который позволяет создавать, читать, обновлять и удалять данные сайта через HTTP-запросы. Это открывает огромные возможности для интеграций, мобильных приложений и кастомных функциональностей. В этой статье мы подробно рассмотрим, как создавать собственные эндпоинты REST API в WordPress, чтобы получать и отправлять именно те данные, которые нужны вашему проекту.

Что такое REST API в WordPress и зачем создавать свои эндпоинты

WordPress с версии 4.7 включает встроенный REST API, предоставляющий стандартные маршруты для работы с постами, страницами, комментариями и другими сущностями. Однако часто возникает необходимость расширить стандартный функционал, добавив свои собственные маршруты для специфичных данных или бизнес-логики.

Создание собственных эндпоинтов позволяет:

  • Обеспечить доступ к кастомным типам записей и метаданным;
  • Реализовать аутентификацию и авторизацию специфичных операций;
  • Интегрироваться с внешними сервисами;
  • Организовать сложную логику обработки данных на стороне сервера через API.

Далее подробно разберем, как это сделать на практике.

Регистрация собственного маршрута REST API в WordPress

Для создания собственного маршрута используется функция register_rest_route. Обычно регистрацию эндпоинтов выполняют через хук rest_api_init. Рассмотрим пример создания маршрута, который возвращает список последних кастомных записей.

add_action('rest_api_init', function () {
    register_rest_route('wpdeveloper/v1', '/custom-posts/', array(
        'methods' => 'GET',
        'callback' => 'wpdeveloper_get_custom_posts',
        'permission_callback' => '__return_true',
    ));
});

function wpdeveloper_get_custom_posts(WP_REST_Request $request) {
    $args = array(
        'post_type' => 'custom_post',
        'posts_per_page' => 5
    );
    $query = new WP_Query($args);
    $posts = array();
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $posts[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'excerpt' => get_the_excerpt(),
                'link' => get_permalink()
            );
        }
        wp_reset_postdata();
    }
    return rest_ensure_response($posts);
}

В этом примере мы создали маршрут /wp-json/wpdeveloper/v1/custom-posts/, который возвращает последние 5 записей типа custom_post. Параметр permission_callback настроен так, что маршрут доступен всем, но в реальном проекте стоит реализовать проверки доступа.

Объяснение параметров функции register_rest_route

Первый параметр — пространство имён и версия API, здесь wpdeveloper/v1. Второй — путь маршрута. Третий — массив с настройками:

  • methods: HTTP-методы, поддерживаемые маршрутом (GET, POST, PUT, DELETE и др.);
  • callback: функция, обрабатывающая запрос и возвращающая данные;
  • permission_callback: функция для проверки прав доступа к маршруту.

Обработка параметров запроса и фильтры

Часто нужно принимать параметры из URL, например, количество записей, категории, сортировку. Для этого в функции-обработчике можно использовать объект WP_REST_Request. Давайте расширим наш пример, чтобы принимать параметр per_page и фильтровать записи.

add_action('rest_api_init', function () {
    register_rest_route('wpdeveloper/v1', '/custom-posts/', array(
        'methods' => 'GET',
        'callback' => 'wpdeveloper_get_custom_posts',
        'permission_callback' => '__return_true',
        'args' => array(
            'per_page' => array(
                'validate_callback' => function($param, $request, $key) {
                    return is_numeric($param) && $param > 0 && $param <= 20;
                },
                'default' => 5
            ),
            'category' => array(
                'validate_callback' => 'is_string'
            )
        ),
    ));
});

function wpdeveloper_get_custom_posts(WP_REST_Request $request) {
    $per_page = $request->get_param('per_page');
    $category = $request->get_param('category');

    $args = array(
        'post_type' => 'custom_post',
        'posts_per_page' => $per_page,
    );

    if ($category) {
        $args['tax_query'] = array(
            array(
                'taxonomy' => 'custom_category',
                'field' => 'slug',
                'terms' => $category,
            ),
        );
    }

    $query = new WP_Query($args);
    $posts = array();
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $posts[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'link' => get_permalink()
            );
        }
        wp_reset_postdata();
    }
    return rest_ensure_response($posts);
}

Теперь можно делать запросы вида /wp-json/wpdeveloper/v1/custom-posts/?per_page=10&category=novosti, и API вернёт до 10 записей из заданной категории.

Аутентификация и безопасность: permission_callback

Чтобы ограничить доступ к эндпоинтам, используйте параметр permission_callback. Например, разрешить доступ только авторизованным пользователям:

'permission_callback' => function () {
    return is_user_logged_in();
}

Или проверять конкретные права:

'permission_callback' => function () {
    return current_user_can('edit_posts');
}

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

Популярные плагины для расширения REST API в WordPress

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

  • WP REST API Controller — позволяет управлять доступом к стандартным эндпоинтам через удобный интерфейс;
  • Advanced Custom Fields to REST API — расширяет API данными из ACF, что полезно при работе с метаполями;
  • JWT Authentication for WP REST API — добавляет поддержку аутентификации через JSON Web Token;
  • WPGraphQL — если хотите альтернативу REST API с GraphQL.

Заключение: лучшие практики работы с REST API в WordPress

При создании собственных эндпоинтов REST API важно соблюдать следующие рекомендации:

  • Используйте уникальное пространство имён и версии API для совместимости и масштабируемости;
  • Обязательно реализуйте проверку прав доступа через permission_callback;
  • Валидация и санитизация входящих данных — залог безопасности и стабильности;
  • Возвращайте стандартизированные ответы с помощью rest_ensure_response для корректной работы клиента;
  • Документируйте свои маршруты и методы, чтобы другие разработчики понимали логику.

Освоив создание собственных REST API маршрутов, вы значительно расширите возможности своего WordPress-сайта и сможете интегрировать его с любыми внешними системами и приложениями.

Автоматическое изменение заголовков постов WordPress по заданным правилам
11.03.2026
Удаление продаж WooCommerce по дате и статусу: практическое руководство
03.05.2026
Как использовать фильтр WooCommerce для удаления заказов по статусу и дате
10.05.2026
Как отключить AJAX в WooCommerce для ускорения загрузки страниц
16.05.2026
Автоматическое удаление неиспользуемых категорий в WordPress
03.04.2026