WooCommerce — один из самых популярных плагинов для создания интернет-магазина на WordPress. Часто возникает необходимость кастомизировать функционал корзины под уникальные задачи бизнеса. В этой статье подробно разберем, как с помощью хуков WooCommerce можно изменить поведение корзины без правки исходных файлов плагина.
Что такое хуки WooCommerce и почему они важны
Хуки — это специальные точки в коде, куда можно «подцепить» свою функцию и изменить или дополнить работу плагина. WooCommerce предоставляет два типа хуков: actions для выполнения дополнительного кода и filters для изменения данных. Такой подход позволяет вносить изменения, не нарушая обновляемость плагина.
В корзине WooCommerce хуки активно применяются для изменения вывода товаров, цен, кнопок и работы сессий пользователя.
Основные хуки для изменения корзины WooCommerce
Фильтры для изменения данных корзины
Например, если нужно изменить цену товара в корзине, используется фильтр woocommerce_cart_item_price. Он позволяет заменить стоимость на лету, не трогая базовые данные.
add_filter('woocommerce_cart_item_price', 'wpsystem_change_cart_item_price', 10, 3);
function wpsystem_change_cart_item_price($price, $cart_item, $cart_item_key) {
// Условие: если товар с ID 123, меняем цену
if ($cart_item['product_id'] == 123) {
$new_price = wc_price(99); // новая цена 99 рублей
return $new_price;
}
return $price;
}
Такой код добавляем в functions.php темы или в свой кастомный плагин.
Action-хуки для добавления контента в корзину
Чтобы добавить дополнительный текст или HTML в корзину, можно использовать action woocommerce_cart_totals_before_order_total. Например, показывать подсказку перед итоговой суммой заказа.
add_action('woocommerce_cart_totals_before_order_total', 'wpsystem_add_cart_notice');
function wpsystem_add_cart_notice() {
echo '<p style="color: #0073aa; font-weight: bold;">Не забудьте проверить промокод!</p>';
}
Практическое применение: добавление блока с бесплатной доставкой
Для увеличения среднего чека полезно показывать прогресс до бесплатной доставки. Реализуем динамический индикатор в корзине с помощью хуков.
add_action('woocommerce_before_cart_totals', 'wpsystem_free_shipping_progress');
function wpsystem_free_shipping_progress() {
$free_shipping_min = 3000; // Минимальная сумма для бесплатной доставки
$cart_total = WC()->cart->subtotal;
if ($cart_total < $free_shipping_min) {
$diff = $free_shipping_min - $cart_total;
echo '<div style="padding:10px; background:#e0f7fa; margin-bottom:15px; border-radius:4px;">';
echo 'Добавьте товаров на сумму ' . wc_price($diff) . ' для бесплатной доставки!';
echo '</div>';
} else {
echo '<div style="padding:10px; background:#c8e6c9; margin-bottom:15px; border-radius:4px;">';
echo 'Поздравляем! Вы получили бесплатную доставку.';
echo '</div>';
}
}
Этот блок появится в корзине, мотивируя пользователей увеличить заказ.
Как фильтровать и изменять данные товаров в корзине
Иногда требуется добавить дополнительное поле или метку к товарам в корзине. Например, показать кастомный атрибут или статью из метаполя.
Используем фильтр woocommerce_get_item_data — он позволяет добавить любую информацию под названием товара.
add_filter('woocommerce_get_item_data', 'wpsystem_add_custom_item_data', 10, 2);
function wpsystem_add_custom_item_data($item_data, $cart_item) {
$product = $cart_item['data'];
$custom_value = get_post_meta($product->get_id(), '_wpsystem_custom_label', true);
if ($custom_value) {
$item_data[] = array(
'key' => 'Особенность',
'value' => wc_clean($custom_value)
);
}
return $item_data;
}
Для этого нужно предварительно добавить метаполе _wpsystem_custom_label через админку или код.
Советы по отладке и безопасности при работе с хуками корзины
При работе с хуками важно проверять входящие данные, чтобы избежать ошибок и возможных уязвимостей. Например, всегда используйте функции очистки данных, такие как wc_clean(), и проверяйте типы данных.
Для отладки удобно использовать плагин Clearfy Pro, который расширяет возможности логирования и управления производительностью WooCommerce.
Заключение
Хуки WooCommerce — мощный инструмент для кастомизации корзины. С их помощью можно менять цены, добавлять пользовательские сообщения, создавать динамические уведомления и улучшать UX магазина без сложных правок ядра. Рекомендуется создавать отдельный плагин для кастомных функций, чтобы сохранить изменения при обновлениях.