Что такое хук WooCommerce Subscription Renewal и зачем он нужен
WooCommerce Subscriptions — популярное расширение для организации подписок в интернет-магазинах на базе WooCommerce. Часто возникает необходимость запускать дополнительные действия при продлении подписки: отправка кастомных уведомлений, интеграция с внешними сервисами, обновление метаданных и т.п.
Хук woocommerce_subscription_renewal_payment_complete срабатывает после успешной оплаты продления подписки. Он позволяет добавить свой код, который выполнится сразу после обновления статуса подписки.
Диагностика проблемы: почему дополнительные действия не запускаются при продлении
- Вы используете неправильный хук или его вариант.
- Код добавлен в неподходящее место (например, не в functions.php или не в плагине).
- Нарушена последовательность параметров функции обработчика.
- Отсутствует проверка правильного объекта подписки.
- Кэширование или конфликт плагинов мешает выполнению кода.
Пошаговое решение: как правильно подключить обработчик на продление подписки
1. Добавьте обработчик в файл functions.php вашей темы или в кастомный плагин
add_action('woocommerce_subscription_renewal_payment_complete', 'my_custom_subscription_renewal_action', 10, 1);
function my_custom_subscription_renewal_action($subscription) {
// Проверяем, что передан объект WC_Subscription
if (!is_a($subscription, 'WC_Subscription')) {
return;
}
// Получаем ID подписки
$subscription_id = $subscription->get_id();
// Пример: добавляем мета-данные с датой продления
update_post_meta($subscription_id, '_last_renewal_date', current_time('mysql'));
// Дополнительные действия, например, вызов внешнего API
// wp_remote_post('https://example.com/api/renewal', [
// 'body' => [ 'subscription_id' => $subscription_id ]
// ]);
}2. Очистите кеш (если используете кеширующие плагины) и протестируйте
Для тестирования можно продлить подписку вручную через админку WooCommerce Subscriptions или дождаться автоматического списания, если настроена автоматизация.
Как проверить, что решение сработало
- В админке WordPress откройте заказ с подпиской, проверьте наличие обновленного мета-поля
_last_renewal_dateчерез плагин Advanced Custom Fields или напрямую в базе. - Если используется сторонний API, проверьте логи запросов через
error_logили инструмент отладки WP. - Добавьте временный
error_logилиwp_mailдля отправки уведомления при срабатывании хука:
function my_custom_subscription_renewal_action($subscription) {
error_log('Подписка продлена: ID ' . $subscription->get_id());
// или
wp_mail('admin@example.com', 'Продление подписки', 'Подписка ID ' . $subscription->get_id() . ' была продлена.');
}Частые ошибки и их исправление
- Ошибка: Обработчик не вызывается.
Причина: Использование хука с неправильным названием или отсутствие нужного плагина WooCommerce Subscriptions.
Решение: Проверьте, что плагин активен, и используйтеwoocommerce_subscription_renewal_payment_complete. - Ошибка: Функция получает некорректный параметр.
Причина: Неправильное количество параметров вadd_action.
Решение: Убедитесь, что вadd_actionуказано 1 как число аргументов, если функция принимает один параметр. - Ошибка: Конфликты с кешем или другими плагинами.
Решение: Отключите кеш временно, проверьте логи ошибок, протестируйте в чистой среде.
Практические советы по безопасности и производительности
- Не используйте тяжелые операции внутри обработчика, лучше ставьте задачи в очередь (через WP-Cron или внешние очереди).
- Проверяйте тип объекта
$subscription, чтобы избежать ошибок PHP. - Используйте nonce и проверяйте права пользователя, если добавляете пользовательские действия через AJAX.
- Для интеграций с внешними API добавьте обработку ошибок и повторных попыток.
Сравнение вариантов интеграции дополнительной логики при продлении подписки
| Метод | Преимущества | Недостатки |
|---|---|---|
Хук woocommerce_subscription_renewal_payment_complete | Прямое выполнение после оплаты, простой код | Зависит от успешной оплаты, может замедлять процесс если тяжелый код |
| WP-Cron с отложенной обработкой | Не блокирует оплату, позволяет повторять задачи | Задержка выполнения, сложнее в реализации |
| Плагины интеграции (например, Zapier, AutomateWoo) | Готовые решения с визуальными настройками | Могут быть платными, ограничены в кастомизации |