wpcontrol.ru wordpress WPControl.ru

Как использовать хук woocommerce_payment_complete для выполнения действий после оплаты в WooCommerce

В 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 для сбора отзывов после покупки.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙