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Удобное управление через админку, подходит для непрофессионаловМожет влиять на производительность, дополнительные зависимости
Ручное отключение через админкуПростота, не требует кодаНе автоматизировано, легко забыть
Автоматическое отключение плагинов по расписанию в WordPress
04.03.2026
Как автоматизировать удаление старых постов в WordPress через 30 дней
08.04.2026
Как создать автоматические заголовки для постов в WordPress
18.01.2026
Как удалить пустые теги и мета-теги в WordPress
13.03.2026
Как создать динамический вывод постов в WordPress
29.11.2025