WooCommerce: автоматическое изменение стоимости и наличия товаров через Webhook

Почему важно автоматизировать изменение цены и наличия товаров в WooCommerce

В интернет-магазинах с большим ассортиментом или динамическими поставками ручное обновление цен и остатков становится трудоемким и ошибочным процессом. Автоматизация через Webhook позволяет мгновенно синхронизировать данные с внешними системами — ERP, CRM, складом или поставщиком, минимизируя ошибки и задержки.

Диагностика проблемы: как понять, что автоматизация нужна именно через Webhook

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

  • Цены и остатки меняются чаще, чем успеваете обновлять вручную.
  • Периодические ошибки при импорте через CSV или API из-за временных лагов.
  • Необходимость мгновенного реагирования на изменения поставщика.
  • Наличие внешней системы, поддерживающей Webhook для отправки уведомлений.

Пошаговое решение: настройка автоматического изменения цены и наличия через Webhook

1. Создаем кастомный endpoint для приема Webhook

В functions.php темы или в собственном плагине добавьте следующий код для регистрации REST API маршрута:

add_action('rest_api_init', function () {
    register_rest_route('custom/v1', '/update-product', array(
        'methods'  => 'POST',
        'callback' => 'handle_webhook_product_update',
        'permission_callback' => '__return_true', // для демонстрации, на проде добавьте проверку
    ));
});

function handle_webhook_product_update(WP_REST_Request $request) {
    $params = $request->get_json_params();
    if (empty($params['sku']) || !isset($params['price']) || !isset($params['stock'])) {
        return new WP_REST_Response(['error' => 'Missing parameters'], 400);
    }

    $product_id = wc_get_product_id_by_sku($params['sku']);
    if (!$product_id) {
        return new WP_REST_Response(['error' => 'Product not found'], 404);
    }

    $product = wc_get_product($product_id);
    $product->set_regular_price($params['price']);
    $product->set_stock_quantity($params['stock']);

    // Обновляем статус наличия
    if ($params['stock'] > 0) {
        $product->set_stock_status('instock');
    } else {
        $product->set_stock_status('outofstock');
    }

    $product->save();

    return new WP_REST_Response(['success' => true, 'product_id' => $product_id], 200);
}

2. Настройка внешней системы для отправки POST-запросов

В системе поставщика или ERP настройте Webhook, который будет отправлять JSON с параметрами:

{
    "sku": "PRODUCTSKU123",
    "price": 1999.99,
    "stock": 15
}

Адрес запроса будет https://your-site.com/wp-json/custom/v1/update-product.

3. Защита Webhook

Для безопасности добавьте проверку секретного токена из заголовков или параметров, например:

function handle_webhook_product_update(WP_REST_Request $request) {
    $token = $request->get_header('X-Webhook-Token');
    if ($token !== 'your_secret_token_here') {
        return new WP_REST_Response(['error' => 'Unauthorized'], 401);
    }
    // далее код из шага 1
}

Проверка результата после внедрения

  • Отправьте тестовый POST-запрос с помощью curl или Postman с корректными параметрами.
  • Проверьте в админке WooCommerce изменения цены и остатка у продукта с указанным SKU.
  • Убедитесь, что статус наличия меняется согласно количеству на складе.
  • Логи сервера и ошибок WordPress не должны содержать ошибок при вызове endpoint.

Частые ошибки и способы их устранения

  • Ошибка 404 при обращении к REST API — проверьте, включен ли permalinks (Постоянные ссылки) и сбросьте их.
  • Неверный или отсутствующий SKU — убедитесь, что SKU совпадает с тем, что в WooCommerce, и что продукт существует.
  • Отсутствие прав доступа — не используйте '__return_true' в permission_callback на проде, а реализуйте проверку токена.
  • Обновление не сохраняется — проверьте, что продукт не заблокирован для редактирования плагинами кеширования или сторонними ограничениями.

Практические советы по безопасности и производительности

  • Добавьте проверку и валидацию входящих данных, чтобы избежать ошибок и потенциальных уязвимостей.
  • Используйте nonce или секретные токены для ограничения доступа к endpoint.
  • Логируйте события Webhook, чтобы быстро выявлять проблемы с интеграцией.
  • Если обновлений много, рассмотрите очередь или батчи для снижения нагрузки на сервер.
  • Отключите ненужные плагины кеширования для REST API или настройте исключения.

Сравнение вариантов реализации автоматического обновления товаров

МетодОписаниеПлюсыМинусы
Webhook + REST API Мгновенное обновление через POST-запросы от поставщика Быстро, надежно, не требует ручного запуска Нужно настроить безопасность, требует поддержки со стороны поставщика
Регулярный импорт CSV Периодическая загрузка файлов с данными Просто реализовать, не требует постоянного соединения Задержки обновления, риск ошибок при импорте
Использование плагинов синхронизации Готовые решения для импорта и обновления Минимум кода, интерфейс в админке Может быть дорого, ограниченная гибкость
Автоматическое обновление остатка и цены товаров WooCommerce через Webhook
22.04.2026
Автоматическое отключение неиспользуемых регистраций в WooCommerce
30.05.2026
Как создать автоматический импорт продуктов в WordPress с помощью WP All Import
25.12.2025
Автоматическое отправление сообщений в Telegram из WordPress
22.12.2025
Как автоматически отключить Emoji в WordPress с помощью кода
18.01.2026