Автоматическое обновление остатка и цены товаров WooCommerce через Webhook с примером кода

Диагностика проблемы: почему нужно автоматическое обновление товаров в WooCommerce

Если у вас интернет-магазин на WooCommerce, и цены или остатки товаров меняются часто — например, из-за внешней системы управления складом (ERP) или поставщика — ручное обновление становится неудобным и затратным по времени. В таких случаях оптимальное решение — получить уведомления от внешней системы через Webhook и автоматически обновлять данные в WooCommerce.

Без автоматизации вы рискуете показывать клиентам устаревшую информацию, теряете продажи и создаёте лишнюю нагрузку на поддержку.

Как работает автоматическое обновление через Webhook

Webhook — это HTTP-запрос, который внешняя система отправляет вашему сайту при изменении данных. Например, при обновлении цены или остатка товара.

Задача — получить POST-запрос, разобрать данные, найти товар в WooCommerce и обновить его свойства.

Что нужно для реализации

  • URL на вашем сайте, который принимает Webhook
  • Обработка входящих данных (JSON или form-data)
  • Код для обновления товара по ID или SKU
  • Ответ с подтверждением успешного обновления

Пошаговое решение с примером кода

1. Создаём endpoint для Webhook

Добавим кастомный endpoint на WordPress с помощью хука rest_api_init для REST API:

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

2. Обработка данных и обновление товара

Функция для обработки запроса:

function handle_product_update_webhook(WP_REST_Request $request) {
    $params = $request->get_json_params();

    // Ожидаем данные: sku, price, stock
    if (empty($params['sku']) || !isset($params['price']) || !isset($params['stock'])) {
        return new WP_REST_Response(['error' => 'Missing sku, price or stock'], 400);
    }

    $sku = sanitize_text_field($params['sku']);
    $price = floatval($params['price']);
    $stock = intval($params['stock']);

    // Получаем ID товара по SKU
    $product_id = wc_get_product_id_by_sku($sku);
    if (!$product_id) {
        return new WP_REST_Response(['error' => 'Product with this SKU not found'], 404);
    }

    $product = wc_get_product($product_id);
    if (!$product) {
        return new WP_REST_Response(['error' => 'Invalid product'], 404);
    }

    // Обновляем цену
    $product->set_regular_price($price);

    // Обновляем остаток
    $product->set_stock_quantity($stock);

    // Включаем управление запасами, если выключено
    $product->set_manage_stock(true);

    $product->save();

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

3. Тестируем Webhook локально

Для теста используйте curl или Postman с запросом типа:

curl -X POST https://your-site.ru/wp-json/custom/v1/update-product \
-H "Content-Type: application/json" \
-d '{"sku":"test-sku-123","price":1999.99,"stock":10}'

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

1. После вызова Webhook проверьте в админке WooCommerce, что у товара с заданным SKU обновились цена и количество остатков.

2. Включите логирование ошибок и ответов REST API (например, через плагин Query Monitor) для отслеживания запросов и ошибок.

3. Для мониторинга лучше настроить ответ на Webhook с подробным JSON, чтобы внешняя система знала о статусе обновления.

Частые ошибки и как их исправить

  • Товар не найден по SKU: проверьте корректность SKU и что товары действительно имеют уникальный SKU. SKU чувствителен к регистру и пробелам.
  • Ошибка 403 или 401: убедитесь, что permission_callback возвращает true, или реализуйте проверку авторизации Webhook (например, через секретный ключ в заголовках).
  • Данные приходят в неверном формате: проверьте, что внешний сервис шлёт JSON, и используйте $request->get_json_params() для разбора.
  • Обновления не применяются: убедитесь, что вызывается $product->save(), и что права на запись есть у сайта.

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

  • Авторизация Webhook: используйте секретный ключ в заголовках или IP-ограничение, чтобы никто посторонний не мог менять данные.
  • Логирование: включите логирование запросов Webhook для аудита и отладки, например, через отдельный файл или плагин Debug Bar.
  • Обработка ошибок: возвращайте понятные HTTP-коды и JSON-ответы, чтобы внешняя система могла повторить попытку при сбое.
  • Кэширование: после обновления товара сбрасывайте кэш (если используете), чтобы клиенты видели актуальные данные.

Сравнение вариантов реализации обновления товаров

МетодПлюсыМинусыПрименимость
Webhook + REST API кастомныйАвтоматизация, мгновенное обновление, гибкостьТребует навыков разработки, настройка безопасностиДля интеграций с внешними системами
Плагины импорта CSV/XMLПростота, не требует кодаОбновления с задержкой, ручной запуск или cronМенее частые обновления, малый бюджет
Ручное обновление в админкеПростота, без кодаТрудозатратно, ошибки, не подходит для частых обновленийМалый каталог товаров
Как автоматически оптимизировать базу данных WordPress
06.02.2026
Как автоматически создать XML Sitemap в WordPress с помощью кода
30.03.2026
Как создать собственный шорткод в WordPress: подробное руководство
10.11.2025
Как настроить автоматический импорт контента из RSS в WordPress
13.04.2026
Как создать автоматический импорт пользовательских данных в WordPress
02.03.2026