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

Почему нужно автоматизировать отключение платёжных систем?

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

Автоматизация отключения по расписанию позволяет обеспечить точное соблюдение временных рамок без вмешательства администратора.

Диагностика задачи: как определить необходимость и условия отключения

Первым делом нужно чётко понять:

  • Какие платёжные методы требуется отключать (ID методов в WooCommerce).
  • В какое время и с какой периодичностью.
  • Что должно происходить с этими методами: отключаться полностью или становиться недоступными для выбора на этапе оформления заказа.

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

add_action('admin_init', function() {
    $available_gateways = WC()->payment_gateways->get_available_payment_gateways();
    error_log(print_r(array_keys($available_gateways), true));
});

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

1. Создаём функцию для отключения платёжных систем

Воспользуемся фильтром 'woocommerce_available_payment_gateways', чтобы динамически убрать нужные методы из списка доступных.

function disable_payment_gateways_by_schedule($available_gateways) {
    // Определяем ID платёжных методов для отключения
    $disable_gateways = array('cod', 'bacs'); // пример: оплата при получении и банковский перевод

    // Задаём время отключения: с 23:00 до 06:00
    $current_time = current_time('H:i');
    if (($current_time >= '23:00') || ($current_time <= '06:00')) {
        foreach ($disable_gateways as $gateway_id) {
            if (isset($available_gateways[$gateway_id])) {
                unset($available_gateways[$gateway_id]);
            }
        }
    }
    return $available_gateways;
}
add_filter('woocommerce_available_payment_gateways', 'disable_payment_gateways_by_schedule');

2. Настройка расписания по нужному часовому поясу

Функция current_time() возвращает время с учётом часового пояса WordPress, что удобно для локальных настроек сайта. Если нужны более сложные расписания (несколько периодов, дни недели), можно расширить условие, например:

$current_hour = (int) current_time('H');
$current_weekday = (int) current_time('w'); // 0=воскресенье
if (($current_hour >= 23 || $current_hour < 6) && in_array($current_weekday, array(1,2,3,4,5))) {
    // отключение по будням ночью
}

3. Добавление возможности гибкой настройки через админку

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

Проверка результата: как убедиться, что отключение работает

  • Перейдите на страницу оформления заказа в разное время суток, чтобы проверить выбор платёжных методов.
  • Проверьте, что платёжные методы, указанные для отключения, отсутствуют в списке доступных в заданное время.
  • Для отладки добавьте error_log() внутри функции и смотрите логи (wp-content/debug.log), включив WP_DEBUG и WP_DEBUG_LOG в wp-config.php.

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

  • Методы не отключаются: Проверьте правильность ID платёжных методов. Они должны совпадать с ключами из WC()->payment_gateways->get_available_payment_gateways().
  • Время отключения не совпадает: Убедитесь, что часовой пояс сайта настроен верно в Настройки → Общие → Часовой пояс.
  • Фильтр не применяется: Возможно, код добавлен в неподходящее место. Рекомендуется использовать файл functions.php активной темы или собственный плагин.
  • Конфликты с другими плагинами оплаты: Некоторые платёжные плагины могут иметь свои условия отображения. Проверьте совместимость.

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

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

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

МетодОписаниеПлюсыМинусы
Фильтр woocommerce_available_payment_gatewaysДинамическое исключение методов по времениПростота, гибкость, не требует сторонних плагиновВызывается на каждой загрузке, нагрузка при сложных проверках
WP-Cron для переключения настроекАвтоматическое включение/отключение методов через изменение опцийМеньшая нагрузка на страницы, чёткое расписаниеСложнее реализовать, требует управления состояниями
Плагины с расписанием (если есть)Готовые решения для расписания отключенияУдобство настройки через UIМогут быть платными, конфликтовать с другими плагинами
Как избежать проблемы с кэшированием в WordPress
12.01.2026
WooCommerce: решение проблемы с повторной отправкой email при изменении цены товара
01.07.2026
Как создать уникальные ссылки для автоматического редиректа в WordPress
19.02.2026
Как изменить автозаполнение форм в WordPress
30.03.2026
Как создать собственный тип записи (Custom Post Type) в WordPress
03.12.2025