Хуки и фильтры WooCommerce: практическое руководство по автоматизации

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

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

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

Прежде чем писать код, важно определить, что именно вы хотите автоматизировать или изменить в WooCommerce. Частые задачи:

  • Изменение цены или скидок для конкретных пользователей
  • Автоматическая смена статуса заказа при выполнении условий
  • Добавление пользовательских метаданных к заказам или товарам
  • Модификация вывода информации на странице товара или в корзине
  • Отправка дополнительных уведомлений при оформлении заказа

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

Пошаговое решение: примеры автоматизации с хуками и фильтрами

Пример 1. Автоматическое применение скидки 10% для зарегистрированных пользователей

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

add_action('woocommerce_cart_calculate_fees', 'apply_10_percent_discount_for_logged_in', 20, 1); function apply_10_percent_discount_for_logged_in( $cart ) { if ( is_user_logged_in() && ! is_admin() && ! defined('DOING_AJAX') ) { $discount = $cart->subtotal * 0.1; $cart->add_fee( 'Скидка 10%', -$discount ); } }

Пример 2. Автоматическое изменение статуса заказа на "выполнен" при оплате через банковский перевод

Для этого используем action woocommerce_thankyou_{payment_method}.

add_action('woocommerce_thankyou_bacs', 'auto_complete_bacs_order'); function auto_complete_bacs_order( $order_id ) { if ( ! $order_id ) return; $order = wc_get_order( $order_id ); if ( $order->get_status() == 'processing' ) { $order->update_status('completed'); } }

Пример 3. Добавление пользовательского поля к заказу и отображение его в админке

Добавим поле "Номер подарочной карты" на страницу оформления заказа и сохраним его в метаданных заказа.

add_action('woocommerce_after_order_notes', 'add_gift_card_field'); function add_gift_card_field( $checkout ) { echo '<div id="gift_card_field"><h2>Подарочная карта</h2>'; woocommerce_form_field( 'gift_card_number', array( 'type' => 'text', 'class' => array('gift-card-number form-row-wide'), 'label' => 'Введите номер подарочной карты', 'placeholder' => '1234-5678-9012', ), $checkout->get_value( 'gift_card_number' ) ); echo '</div>'; } add_action('woocommerce_checkout_update_order_meta', 'save_gift_card_field'); function save_gift_card_field( $order_id ) { if ( ! empty( $_POST['gift_card_number'] ) ) { update_post_meta( $order_id, '_gift_card_number', sanitize_text_field( $_POST['gift_card_number'] ) ); } }

Для отображения в админке:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_gift_card_in_admin', 10, 1 ); function display_gift_card_in_admin( $order ){ $gift_card = get_post_meta( $order->get_id(), '_gift_card_number', true ); if ( $gift_card ) { echo '<p><strong>Номер подарочной карты:</strong> ' . esc_html( $gift_card ) . '</p>'; } }

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

  • Для скидки: добавьте товар в корзину под разными учетными записями и проверьте наличие скидки для авторизованных пользователей.
  • Для изменения статуса: оформите заказ с оплатой банковским переводом и убедитесь, что статус меняется на «выполнен» после оплаты.
  • Для пользовательского поля: заполните поле при оформлении заказа и проверьте, что оно сохраняется и отображается в админке.

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

  • Код не выполняется: проверьте, подключён ли файл с кодом (functions.php или плагин), и нет ли синтаксических ошибок.
  • Фильтр не влияет на цену: убедитесь, что используете правильный хук — woocommerce_cart_calculate_fees вызывается после инициализации корзины.
  • Статус заказа не меняется: проверьте, что условие для статуса и ID оплаты совпадают с реальными значениями.
  • Данные из пользовательских полей не сохраняются: проверьте правильность имён полей и наличие sanitize_text_field для безопасности.

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

  • Используйте проверку is_admin() и defined('DOING_AJAX'), чтобы не выполнять код в админке или AJAX-запросах, если это не нужно.
  • Санитизируйте и валидируйте данные из форм для защиты от XSS и инъекций.
  • Минимизируйте использование тяжелых операций в хуках, влияющих на загрузку страницы или оформление заказа.
  • Используйте кэширование результатов, если хуки выполняют сложные вычисления.

Сравнение способов автоматизации в WooCommerce

МетодПлюсыМинусыПример применения
Использование хуков и фильтровГибко, без плагинов, высокая производительностьТребует навыков программированияАвтоматические скидки, смена статусов
Плагины автоматизации (например, AutomateWoo)Удобный интерфейс, много функций без кодаНагрузка на сайт, платные решенияКомплексные сценарии маркетинга
Встроенные настройки WooCommerceПростота, встроенные функцииОграниченная гибкостьПростые скидки, уведомления
Как автоматически удалять неактивные вариации товаров в WooCommerce с помощью кода
07.05.2026
Автоматическое удаление старых терминов в WordPress
23.03.2026
Как установить автоматический редирект в WordPress без плагинов
24.01.2026
Как создать автоматические резервные копии WordPress
29.11.2025
Как автоматически создавать контент на основе GPT в WordPress
07.01.2026