В WooCommerce часто возникает необходимость выполнять определённые действия сразу после успешной оплаты заказа. Например, можно отправлять уведомления, изменять статус заказа, интегрироваться с внешними сервисами или запускать кастомную логику. Для этого в системе предусмотрен хук woocommerce_payment_complete, который срабатывает, когда заказ считается оплаченным.
Что такое хук woocommerce_payment_complete и когда он срабатывает
Хук woocommerce_payment_complete вызывается в момент, когда платеж по заказу успешно прошёл и заказ получает статус "завершён" или "обработка" в зависимости от настроек. Это универсальное событие, на которое можно подписаться через функцию add_action и выполнять любые действия с объектом заказа.
Основное преимущество этого хука в том, что он срабатывает после подтверждения оплаты, независимо от способа платежа (банковская карта, электронные деньги, наложенный платеж и т.п.).
Синтаксис использования:
add_action('woocommerce_payment_complete', 'wpcontrol_woocommerce_payment_complete_callback');
function wpcontrol_woocommerce_payment_complete_callback($order_id) {
// код обработки
}
Пример 1. Отправка пользовательского письма после оплаты заказа
Допустим, нужно отправить дополнительное письмо клиенту с благодарностью и бонусным промокодом после успешной оплаты. Для этого можно использовать следующий код:
add_action('woocommerce_payment_complete', 'wpcontrol_send_thankyou_email');
function wpcontrol_send_thankyou_email($order_id) {
$order = wc_get_order($order_id);
$to = $order->get_billing_email();
$subject = 'Спасибо за заказ на нашем сайте';
$message = "Здравствуйте,\n\nСпасибо за ваш заказ №{$order_id}! В качестве благодарности мы дарим вам промокод: THANKS10 со скидкой 10%.\n\nС уважением, команда магазина.";
wp_mail($to, $subject, $message);
}
Этот код можно добавить в файл functions.php активной темы или в собственный плагин.
Пример 2. Автоматическое добавление товара-бонуса после оплаты
Иногда требуется автоматически добавить в заказ бесплатный товар (подарок) после успешной оплаты. Сделать это можно так:
add_action('woocommerce_payment_complete', 'wpcontrol_add_bonus_product');
function wpcontrol_add_bonus_product($order_id) {
$order = wc_get_order($order_id);
$bonus_product_id = 123; // ID товара-бонуса
// Проверим, что бонусный товар ещё не добавлен
$has_bonus = false;
foreach ($order->get_items() as $item) {
if ($item->get_product_id() == $bonus_product_id) {
$has_bonus = true;
break;
}
}
if (!$has_bonus) {
$order->add_product(wc_get_product($bonus_product_id), 1);
$order->calculate_totals();
$order->save();
}
}
Важно: добавление товара в уже оплаченный заказ может влиять на расчёты, поэтому используйте данный метод аккуратно.
Как отладить работу хука woocommerce_payment_complete
Для проверки срабатывания хука можно временно добавить запись в лог:
add_action('woocommerce_payment_complete', 'wpcontrol_log_payment_complete');
function wpcontrol_log_payment_complete($order_id) {
if (function_exists('wc_get_logger')) {
$logger = wc_get_logger();
$logger->info("Оплата заказа #{$order_id} успешно завершена.", array('source' => 'wpcontrol'));
}
}
Логи WooCommerce обычно находятся в wp-content/uploads/wc-logs/. Это поможет убедиться, что хук срабатывает как надо.
Другие полезные хуки для работы с оплатой в WooCommerce
woocommerce_order_status_completed— срабатывает при смене статуса заказа на "завершён".woocommerce_order_status_processing— при смене на "обработка".woocommerce_thankyou— выводит дополнительный контент на странице благодарности после оплаты.
Выбор правильного хука зависит от конкретной задачи. Для большинства действий после оплаты именно woocommerce_payment_complete подходит лучше всего.
Резюме и рекомендации
Хук woocommerce_payment_complete — мощный инструмент для расширения функциональности WooCommerce, позволяющий запускать кастомный код сразу после подтверждения оплаты. Он универсален и надёжен.
Чтобы избежать проблем, внимательно тестируйте свои функции и учитывайте особенности бизнес-логики магазина. В некоторых случаях лучше использовать другие хуки, например, связанные с изменением статуса заказа.
Для расширения возможностей можно комбинировать этот хук с плагинами, например, с Clearfy Pro для оптимизации, или WPRemark для сбора отзывов после покупки.