Как создать собственный REST API для WooCommerce в WordPress

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

Почему стоит создавать собственные REST API для WooCommerce

Стандартный WooCommerce REST API покрывает основные операции с товарами, заказами, клиентами, купонами и т.д. Но бывают задачи, которые требуют:

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

В этой статье мы разберём, как на практике создать собственный REST API для WooCommerce, используя хуки WordPress и основы построения REST API.

Основы создания собственного REST API в WordPress

WordPress предоставляет встроенный механизм для создания REST API через класс WP_REST_Controller и функцию register_rest_route. Мы можем зарегистрировать новый маршрут, указать методы (GET, POST и др.) и обработчики запросов.

Для начала создадим простой эндпоинт, который возвращает кастомную информацию о заказах WooCommerce.

Регистрация маршрута REST API

В файле плагина или в functions.php темы добавим следующий код:

add_action('rest_api_init', function () {
    register_rest_route('wporders/v1', '/order-info/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'wporders_get_order_info',
        'permission_callback' => function () {
            return current_user_can('read');
        }
    ));
});

Здесь мы зарегистрировали маршрут /wp-json/wporders/v1/order-info/<id>, который принимает ID заказа и вызывает функцию wporders_get_order_info.

Создание функции обработки запроса

Функция должна принимать объект $request и возвращать данные в формате JSON.

function wporders_get_order_info($request) {
    $order_id = $request->get_param('id');
    $order = wc_get_order($order_id);
    if (!$order) {
        return new WP_Error('no_order', 'Заказ не найден', array('status' => 404));
    }

    // Формируем ответ с нужными данными
    $data = array(
        'id' => $order->get_id(),
        'status' => $order->get_status(),
        'total' => $order->get_total(),
        'items' => array(),
    );

    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        $data['items'][] = array(
            'product_id' => $product ? $product->get_id() : 0,
            'name' => $item->get_name(),
            'quantity' => $item->get_quantity(),
            'total' => $item->get_total(),
        );
    }

    return rest_ensure_response($data);
}

Добавление POST эндпоинта для обновления статуса заказа

Часто нужно не только получать данные, но и обновлять их. Создадим POST эндпоинт для изменения статуса заказа.

add_action('rest_api_init', function () {
    register_rest_route('wporders/v1', '/order-status/(?P<id>\d+)', array(
        'methods' => 'POST',
        'callback' => 'wporders_update_order_status',
        'permission_callback' => function () {
            return current_user_can('edit_shop_orders');
        }
    ));
});

function wporders_update_order_status($request) {
    $order_id = $request->get_param('id');
    $status = sanitize_text_field($request->get_param('status'));
    $allowed_statuses = wc_get_order_statuses();

    if (!isset($allowed_statuses['wc-' . $status])) {
        return new WP_Error('invalid_status', 'Неверный статус заказа', array('status' => 400));
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return new WP_Error('no_order', 'Заказ не найден', array('status' => 404));
    }

    $order->update_status($status, 'Статус изменён через кастомный REST API');
    return rest_ensure_response(array('success' => true, 'new_status' => $status));
}

Безопасность и аутентификация в кастомных REST API эндпоинтах

Очень важно контролировать доступ к API — неавторизованные пользователи не должны менять данные заказов. В примерах выше для проверки прав используется функция current_user_can(), которая проверяет, может ли пользователь читать данные или редактировать заказы.

Для аутентификации можно использовать стандартные методы WordPress REST API: cookie-аутентификацию для браузерных запросов, Basic Auth или OAuth для внешних клиентов. Для интеграции с мобильными приложениями часто используют JWT (JSON Web Tokens) — для этого есть готовые плагины, например, JWT Authentication for WP REST API.

Полезные плагины для расширения REST API WooCommerce

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

  • WooCommerce REST API Manager — расширяет базовый API, добавляя дополнительные поля и возможности.
  • WP REST API Controller — позволяет настраивать доступ к стандартным эндпоинтам и создавать новые без программирования.
  • JWT Authentication for WP REST API — добавляет поддержку JWT для безопасной аутентификации.

Однако собственный код даёт максимальную гибкость и позволяет полностью контролировать логику.

Практические советы по работе с кастомным REST API для WooCommerce

Обработка ошибок и валидация данных

Обязательно валидируйте входящие данные и возвращайте корректные HTTP коды и сообщения об ошибках через WP_Error. Это поможет клиентам API правильно реагировать на проблемы.

Кэширование и производительность

Если API обрабатывает большое количество запросов, стоит подумать о кэшировании результатов, например, через Transients API или внешние кэш-системы. Это снизит нагрузку на базу данных.

Логирование запросов

Для отладки и анализа полезно вести лог запросов к API, особенно POST и PUT, где меняются данные. Это поможет быстро находить и исправлять ошибки.

Заключение

Создание собственного REST API для WooCommerce — мощный инструмент для расширения возможностей вашего интернет-магазина. Вы можете создавать уникальные интеграции, оптимизировать бизнес-процессы и обеспечивать безопасность данных. Приведённые примеры кода помогут быстро начать разработку и адаптировать API под свои задачи.

Как создать функционал подписки на новости в WordPress: практическое руководство
25.11.2025
Создание и использование shortcode в WordPress: подробное руководство с примерами кода
11.11.2025
Как создать автоматический скрипт для обновления статусов заказов WooCommerce
09.02.2026
Как сделать удобный фильтрованный список заказов в WordPress без WooCommerce
31.01.2026
Как создать автоматический отчет по заказам WooCommerce с помощью PHP
05.02.2026