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

Диагностика проблемы: зачем нужна автоматизация отключения платёжных систем

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

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

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

1. Определение временных интервалов отключения

Для начала необходимо задать расписание, в которое платёжные системы будут отключаться. Например, отключать "Cheque" и "Cash on Delivery" с 23:00 до 06:00.

function get_disabled_payment_gateways_schedule() {
    return [
        '23:00-06:00' => [
            'cheque',
            'cod'
        ]
    ];
}

2. Функция для проверки текущего времени в заданных интервалах

Создадим функцию, которая проверяет, находится ли текущее время в одном из заданных интервалов.

function is_time_in_range($start, $end, $current) {
    $start = DateTime::createFromFormat('H:i', $start);
    $end = DateTime::createFromFormat('H:i', $end);
    $current = DateTime::createFromFormat('H:i', $current);

    if ($start > $end) { // интервал перетекает через полночь
        return ($current >= $start) || ($current <= $end);
    } else {
        return ($current >= $start) && ($current <= $end);
    }
}

3. Фильтр для отключения платёжных систем в WooCommerce

Добавим фильтр woocommerce_available_payment_gateways, который будет скрывать платёжные системы в заданное время.

add_filter('woocommerce_available_payment_gateways', 'disable_payment_gateways_by_schedule');
function disable_payment_gateways_by_schedule($available_gateways) {
    $schedule = get_disabled_payment_gateways_schedule();
    $current_time = current_time('H:i');

    foreach ($schedule as $interval => $gateways_to_disable) {
        list($start, $end) = explode('-', $interval);
        if (is_time_in_range($start, $end, $current_time)) {
            foreach ($gateways_to_disable as $gateway_id) {
                if (isset($available_gateways[$gateway_id])) {
                    unset($available_gateways[$gateway_id]);
                }
            }
        }
    }
    return $available_gateways;
}

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

  1. Настройте часовой пояс WordPress в Настройки > Общие, чтобы время совпадало с вашим регионом.
  2. В указанное время проверьте оформление заказа — платёжные системы из списка должны быть недоступны.
  3. Вне интервала отключения эти платёжные системы должны отображаться как обычно.
  4. Для теста можно временно изменить расписание на ближайшее время и проверить сразу.

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

  • Неправильно установлен часовой пояс WordPress: Функция current_time('H:i') зависит от настроек сайта. Проверьте, чтобы часовой пояс был верным.
  • Неверные ID платёжных систем: Убедитесь, что используете правильные ID gateway (например, cheque, cod). Их можно посмотреть в настройках WooCommerce > Платёжные системы или через дебаг:
add_action('woocommerce_available_payment_gateways', function($gateways) {
    error_log('Available gateways: ' . implode(', ', array_keys($gateways)));
    return $gateways;
});
  • Интервалы времени не учитывают переход через полночь: В коде предусмотрена проверка на такой случай, но если формат расписания изменён, функция может работать неправильно.
  • Конфликты с другими плагинами, управляющими платёжными системами: Проверьте совместимость и порядок активации фильтров.

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

  • Не используйте wp_cron или внешние cron-задачи для отключения платёжных систем — фильтр работает динамически при загрузке страницы оформления заказа.
  • Минимизируйте количество операций внутри фильтра, чтобы не замедлять процесс загрузки страницы.
  • Если планируете расширять расписание, храните его в настройках через update_option и добавьте административный интерфейс.
  • Для повышения безопасности убедитесь, что ваши платёжные системы корректно защищены на уровне API и SSL, отключение по времени не должно влиять на безопасность.

Сравнение вариантов реализации

МетодПреимуществаНедостатки
Фильтр woocommerce_available_payment_gatewaysПростая реализация, работает без дополнительных плагинов, гибко настраиваетсяТребует базовых знаний PHP, нет GUI для расписания
Плагин с расписанием и GUIУдобное управление через админку, подходит для непрофессионаловМожет влиять на производительность, дополнительные зависимости
Ручное отключение через админкуПростота, не требует кодаНе автоматизировано, легко забыть
WooCommerce: автоматическое изменение стоимости товаров по расписанию
12.07.2026
Как использовать хуки в WordPress для расширения функциональности
24.11.2025
WooCommerce: автоматическое создание атрибутов и вариантов товаров через код
16.06.2026
Как удалить пустые категории в WordPress
04.03.2026
Кастомизация переходов между страницами в WordPress без перезагрузки
04.01.2026