WooCommerce: автоматическое отключение платёжных систем по расписанию

Проблема: необходимость временно отключить платёжные системы в WooCommerce

В некоторых случаях требуется временно отключить одну или несколько платёжных систем в WooCommerce по расписанию. Например, для проведения технического обслуживания платёжного шлюза, смены настроек или предотвращения приёма заказов в нерабочее время. В стандартном WooCommerce нет встроенного функционала для автоматизации этой задачи, поэтому приходится делать это вручную через админку, что неудобно и чревато ошибками.

Диагностика задачи: как понять, что платёжная система неактивна

Перед внедрением автоматического отключения важно проверить, как WooCommerce управляет доступностью платёжных методов. Платёжные системы активируются или отключаются через опции и фильтры. Для проверки текущего состояния методов можно использовать следующий код в functions.php темы или в плагине:

add_action('woocommerce_checkout_process', function() {  $available_gateways = WC()->payment_gateways->get_available_payment_gateways();  error_log('Доступные платежные системы: '.implode(", ", array_keys($available_gateways)));});

Этот код выведет в лог список доступных платёжных систем при попытке оформления заказа. Если нужный метод отсутствует, значит он отключён.

Пошаговое решение: как автоматически отключать платёжные системы по расписанию

1. Использование WP-Cron для периодического запуска задачи

Для реализации расписания потребуется зарегистрировать собственное событие в WP-Cron, которое будет выполнять отключение или включение платёжных систем в нужное время.

2. Функция для включения/отключения платёжных методов

Реализуем фильтр woocommerce_available_payment_gateways, который позволит динамически скрывать методы в зависимости от текущего времени.

function toggle_payment_gateways_by_schedule($available_gateways) {  $current_time = current_time('H:i'); // формат ЧЧ:ММ  $disable_start = '23:00'; // время начала отключения  $disable_end = '06:00';   if ($current_time >= $disable_start || $current_time <= $disable_end) {    // Перечислите ID платёжных систем для отключения    $gateways_to_disable = ['cod', 'bacs', 'paypal'];     foreach ($gateways_to_disable as $gateway_id) {      if (isset($available_gateways[$gateway_id])) {        unset($available_gateways[$gateway_id]);      }    }  }   return $available_gateways; } add_filter('woocommerce_available_payment_gateways', 'toggle_payment_gateways_by_schedule');

В данном примере платёжные методы cod (наложенный платёж), bacs (банковский перевод) и paypal отключаются с 23:00 до 06:00 по серверному времени WordPress.

3. Регистрация кастомного WP-Cron для логирования или расширенного управления

Хотя фильтр выше уже решает задачу, можно добавить WP-Cron, чтобы по расписанию например отправлять логи или изменять опции, если нужно более сложное поведение.

function register_daily_payment_gateways_check() {  if (!wp_next_scheduled('daily_payment_gateways_check_event')) {    wp_schedule_event(time(), 'daily', 'daily_payment_gateways_check_event');  }} add_action('wp', 'register_daily_payment_gateways_check');  add_action('daily_payment_gateways_check_event', function() {  // Можно добавить логику сброса кэша или отправки уведомлений  error_log('Ежедневная проверка платёжных систем выполнена');});

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

  • Время сервера совпадает с ожиданиями? Проверить через error_log(current_time('Y-m-d H:i:s'));.
  • При попытке оформить заказ в период отключения указанные платёжные методы не отображаются в списке.
  • Вне указанного времени платёжные системы доступны для выбора.

Для проверки можно вручную менять время на сервере или временно изменять переменные в коде.

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

  • Неправильное время сервера: убедитесь, что часовой пояс WordPress и сервера совпадают (Настройки → Общие → Часовой пояс).
  • Неверные ID платёжных систем: проверьте ID, они чувствительны к регистру и должны совпадать с ключами в WC()->payment_gateways->payment_gateways().
  • Кэширование: если используется кэширование, оно может показывать устаревшие данные. Очистите кэш или отключите его для страниц оформления заказа.
  • Проблемы с WP-Cron: если события не выполняются, проверьте, работает ли WP-Cron или настройте системный cron для вызова wp-cron.php.

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

  • Не храните пароли или чувствительные данные в коде для отключения платёжных систем.
  • Оптимизируйте фильтр woocommerce_available_payment_gateways, чтобы не выполнять тяжелые операции, он вызывается на каждом шаге оформления заказа.
  • При необходимости интеграции с внешними API для проверки статуса платёжных шлюзов используйте асинхронные запросы через WP-Cron.
  • Тестируйте на staging-среде перед внедрением на боевом сайте.

Сравнение способов отключения платёжных систем

Метод Преимущества Недостатки
Ручное отключение в админке WooCommerce Просто, не требует кода Требует постоянного внимания, легко забыть
Фильтр woocommerce_available_payment_gateways с проверкой времени Автоматизация, гибкость, не требует плагинов Зависит от правильного времени сервера и настройки кэша
Плагины для расписания отключения платёжных систем Готовое решение с интерфейсом Может быть избыточным, нагрузка на сайт, необходимость обновлений
WooCommerce: автоматическое возврат средств после отмены заказа
07.06.2026
Как успешно использовать AJAX в WordPress для объявлений и обновления контента
11.04.2026
WooCommerce: автоматическое изменение стоимости товаров при изменении варианта
10.06.2026
Как автоматизировать создание и обновление категорий в WordPress с помощью кода
17.03.2026
Как удалить верстку WordPress: лучшие плагины и примеры кода
09.11.2025