WooCommerce: как настроить автопродление подписок через CRON

Диагностика задачи: почему нужен CRON для автопродления подписок в WooCommerce

Автопродление подписок — ключевая функция для магазинов с регулярными платежами. В WooCommerce Subscriptions процесс автопродления обычно обрабатывается самим плагином, но иногда возникают ситуации, когда автоматические платежи не срабатывают вовремя или вообще не происходят из-за проблем с CRON-задачами WordPress.

Основная причина — отсутствие или сбой системного планировщика задач (WP-Cron), что ведет к задержкам или пропускам запуска автопродления. Для стабильной работы подписок важно убедиться, что задачи по автопродлению запускаются регулярно и без ошибок.

Как проверить работу CRON для автопродления подписок в WooCommerce

  • Установите плагин WP Crontrol для просмотра и управления CRON-задачами.
  • В разделе «Cron Events» найдите задачи, связанные с WooCommerce Subscriptions, например, woocommerce_scheduled_subscription_payment.
  • Проверьте, что задачи запланированы и не имеют ошибок.
  • Запустите задачи вручную и посмотрите логи ошибок, если есть.

Пошаговое решение: настройка автономного CRON для автопродления подписок

1. Отключение WP-Cron и настройка системного CRON

WP-Cron зависит от посещений сайта, что не всегда надежно. Рекомендуется отключить WP-Cron и настроить системный CRON на сервере:

# В файле wp-config.php добавьте перед строкой /* That's all, stop editing! Happy blogging. */define('DISABLE_WP_CRON', true);

Далее настройте системный CRON на сервере. Для примера, запуск WP-Cron каждые 5 минут:

*/5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Замените https://example.com на адрес вашего сайта. Это обеспечит регулярный запуск CRON-задач.

2. Проверка автопродления подписок с помощью кастомного скрипта

Если хотите дополнительно контролировать процесс, можно создать кастомный скрипт, который будет запускать оплату подписок вручную по CRON.

add_action('custom_subscription_renewal', function() {  if (!class_exists('WC_Subscriptions_Manager')) {    return;  }  $subscriptions = wcs_get_subscriptions(array(    'subscription_status' => 'active',    'subscriptions_per_page' => -1,  ));  foreach ($subscriptions as $subscription) {    if ($subscription->needs_payment()) {      try {        $subscription->process_renewal_payment();      } catch (Exception $e) {        error_log('Ошибка автопродления подписки ID ' . $subscription->get_id() . ': ' . $e->getMessage());      }    }  }});

Добавьте этот хук в functions.php и вызовите его через CRON:

*/10 * * * * wp cron event run custom_subscription_renewal

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

  • Проверьте в WP Crontrol, что задачи запускаются по расписанию.
  • Посмотрите журналы ошибок сервера и логи WooCommerce Subscriptions на предмет успешных или неудачных платежей.
  • Создайте тестовую подписку с ближайшим сроком продления и проверьте, что автопродление прошло без ошибок и статус заказа изменился на «Завершён».
  • Отслеживайте платежи через админку WooCommerce — они должны появляться автоматически.

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

  • Нет запуска CRON-задач: Проверьте отключен ли WP-Cron в wp-config.php и корректно ли настроен системный CRON. Часто хостинг не позволяет выполнять wget или curl, используйте альтернативы или обратитесь в поддержку.
  • Ошибки платежей автопродления: Убедитесь в актуальности платежных данных пользователей и правильной настройке платежных шлюзов.
  • Перегрузка сервера из-за большого количества подписок: Разбейте обработку подписок на батчи, например, обрабатывайте по 20 подписок за раз с помощью параметра 'subscriptions_per_page' => 20 и запускайте CRON чаще.
  • Отсутствие уведомлений об ошибках: Включите логирование WooCommerce Subscriptions в настройках, чтобы видеть детали сбоев.

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

  • Используйте системный CRON вместо WP-Cron для стабильности и меньшей нагрузки.
  • Ограничьте количество подписок, обрабатываемых за один запуск, чтобы избежать таймаутов.
  • Защитите URL wp-cron.php от внешнего доступа, если используете системный CRON, чтобы избежать DDoS.
  • Регулярно обновляйте WooCommerce и расширения подписок для безопасности и совместимости.
  • Если у вас большой магазин, рассмотрите использование Redis или Memcached для кэширования запросов к базе данных.

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

МетодПлюсыМинусыРекомендации
WP-Cron (по умолчанию)Прост в настройке и не требует доступа к серверуЗависит от посещаемости сайта, возможны задержкиПодходит для сайтов с высокой посещаемостью
Системный CRONСтабильный запуск по расписанию, не зависит от посетителейТребует доступа к серверу/хостингу, базовые навыки администрированияРекомендуется для магазинов с подписками и большим трафиком
Кастомный CRON с батчевой обработкойКонтроль над процессом, возможность логирования и отладкиТребует разработки и поддержки кодаИспользуйте для сложных сценариев и больших баз подписок
Как вывести платежные данные WooCommerce в админке WordPress
18.04.2026
WooCommerce: как разрешить оплату в разных валютах с проверкой и настройкой
21.04.2026
WooCommerce: как отследить и отменить незавершённые платежи автоматически
24.04.2026
WooCommerce: как установить платежные лимиты по пользователям
12.06.2026
Как создать автоматическую проверку платежей в WordPress
04.04.2026