Как использовать WooCommerce хуки для автоматизации процессов в интернет-магазине

Что такое хуки в WooCommerce и зачем они нужны

WooCommerce построен на системе хуков — actions (действия) и filters (фильтры), позволяющих вмешиваться в работу магазина без изменения исходных файлов. Это основной инструмент для кастомизации и автоматизации процессов: от изменения email-сообщений до управления статусами заказов и обновления метаданных продуктов.

Разница между action и filter хуками

  • Action — выполняет дополнительный код в определенный момент (например, после создания заказа).
  • Filter — изменяет данные перед их выводом или сохранением (например, меняет текст кнопки или цену).

Диагностика: как понять, где применить хуки

Часто задачи автоматизации связаны с повторяющимся поведением, которое нужно упростить или интегрировать с внешними системами. Признаки необходимости хуков:

  • Требуется изменить поведение стандартных функций WooCommerce.
  • Необходимо добавить дополнительные проверки или действия при изменении статуса заказа.
  • Хочется автоматически обновлять или добавлять метаданные продуктов.

Для диагностики стоит включить WP_DEBUG и проверить логи ошибок, а также изучить список доступных хуков в официальной документации WooCommerce: https://docs.woocommerce.com/wc-apidocs/hook-docs.html

Пошаговое решение: пример автоматического добавления скидки при смене статуса заказа

Задача: при смене статуса заказа на "выполнен" автоматически добавить скидку 10% на следующий заказ покупателю.

Шаг 1. Добавить action-хук на смену статуса заказа

add_action('woocommerce_order_status_completed', 'add_discount_for_next_order', 10, 1);

Шаг 2. Реализовать функцию добавления скидочного купона покупателю

function add_discount_for_next_order($order_id) {
    $order = wc_get_order($order_id);
    $user_id = $order->get_user_id();
    if (!$user_id) return; // гость — не добавляем

    // Создаем уникальный купон
    $coupon_code = 'next_order_10_' . $user_id . '_' . time();

    $coupon = new WC_Coupon();
    $coupon->set_code($coupon_code);
    $coupon->set_discount_type('percent');
    $coupon->set_amount(10);
    $coupon->set_individual_use(true);
    $coupon->set_usage_limit(1);
    $coupon->set_usage_limit_per_user(1);
    $coupon->set_date_expires(strtotime('+30 days'));
    $coupon->set_description('Скидка 10% на следующий заказ для пользователя ' . $user_id);
    $coupon->save();

    // Сохраняем купон в мета пользователя для информирования
    update_user_meta($user_id, '_next_order_discount_coupon', $coupon_code);
}

Шаг 3. Информационное сообщение для пользователя

Добавим фильтр для отображения уведомления на странице аккаунта:

add_action('woocommerce_account_dashboard', 'show_discount_coupon_message');
function show_discount_coupon_message() {
    $user_id = get_current_user_id();
    $coupon_code = get_user_meta($user_id, '_next_order_discount_coupon', true);
    if ($coupon_code) {
        echo '<div class="woocommerce-message">У вас есть скидка 10% на следующий заказ. Используйте купон: <strong>' . esc_html($coupon_code) . '</strong></div>';
    }
}

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

  • Создайте тестовый заказ и смените его статус на «выполнен» через админку WooCommerce.
  • Войдите под пользователем, который делал заказ, и проверьте появление сообщения с купоном в личном кабинете.
  • Попробуйте применить купон на странице оформления заказа — должна активироваться скидка 10%.

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

  • Ошибка: Купон не создается — проверьте, что пользователь авторизован (get_user_id не возвращает 0 для гостей).
  • Ошибка: Скидка не применяется — убедитесь, что купон активен и не истек, а также что он не ограничен по товарам или категориям.
  • Ошибка: Сообщение не отображается — проверьте, не отключена ли зона видимости хуков для личного кабинета и наличие кода вывода.

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

  • Всегда проверяйте права пользователя перед изменением данных.
  • Используйте nonce и проверку capabilities при обработке AJAX или форм.
  • Для массовых изменений используйте WP-CLI для выполнения вне веб-запросов.
  • Избегайте тяжелых операций в хуках, которые вызываются часто (например, на каждом просмотре страницы).

Сравнение вариантов автоматизации задач WooCommerce

МетодОписаниеПреимуществаНедостатки
Код на хукахДобавление PHP-кода в functions.php или отдельный плагинМаксимальная гибкость, отсутствие нагрузки от плагиновТребует навыков программирования, риск ошибок при некорректном коде
Плагины автоматизацииИспользование готовых плагинов (например, AutomateWoo)Удобный интерфейс, готовые шаблоны, поддержкаНагрузка на сайт, возможные конфликты, платные функции
Внешние сервисыИнтеграция через API и вебхукиМасштабируемость, автоматизация вне сайтаСложность настройки, задержки, зависимость от внешних систем
Как использовать AJAX в WordPress для динамического обновления контента
20.02.2026
Использование WP-Cron для автоматического удаления старых записей в WordPress
24.04.2026
Как настроить автоматическую работу с сообщениями в WordPress
21.11.2025
Как избежать конфликтов между плагинами в WordPress
06.03.2026
Автоматическое создание скидки на первую покупку в WooCommerce через код
30.05.2026