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

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

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

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

Как программно отключить платёжный метод WooCommerce по расписанию

Общая идея решения

Мы будем использовать хук woocommerce_available_payment_gateways, чтобы отключать платёжные методы согласно текущему времени и расписанию, заданному в коде. Расписание можно задать в виде массива с интервалами и ID платёжных методов.

Пример кода для functions.php или собственного плагина

add_filter('woocommerce_available_payment_gateways', 'disable_payment_gateways_by_schedule');
function disable_payment_gateways_by_schedule($gateways) {
    // Настройте расписание: ключ - ID платёжного метода, значение - массив интервалов с 'start' и 'end' в формате 'H:i'
    $schedule = [
        'paypal' => [
            ['start' => '22:00', 'end' => '23:59'],
            ['start' => '00:00', 'end' => '06:00']
        ],
        'cod' => [
            ['start' => '00:00', 'end' => '08:00']
        ]
    ];

    $current_time = current_time('H:i');

    foreach ($schedule as $gateway_id => $intervals) {
        if (!isset($gateways[$gateway_id])) {
            continue; // если метод не активен
        }

        foreach ($intervals as $interval) {
            $start = $interval['start'];
            $end = $interval['end'];

            // учёт интервала, переходящего через полночь
            if ($start <= $end) {
                $in_interval = ($current_time >= $start && $current_time <= $end);
            } else {
                $in_interval = ($current_time >= $start || $current_time <= $end);
            }

            if ($in_interval) {
                unset($gateways[$gateway_id]);
                break; // отключили этот метод, переходим к следующему
            }
        }
    }

    return $gateways;
}

Пошаговое руководство по внедрению

  1. Откройте файл functions.php вашей дочерней темы или создайте собственный плагин для кастомного кода.
  2. Скопируйте и вставьте приведённый выше код.
  3. В массиве $schedule укажите ID платёжных методов, которые хотите отключать, и интервалы времени в формате 24ч HH:MM. ID методов можно посмотреть в админке WooCommerce или в списке плагинов платёжных систем.
  4. Сохраните изменения.
  5. Убедитесь, что часовой пояс WordPress настроен правильно (Настройки > Общие).

Как проверить, что отключение работает

  • Перейдите в корзину или оформление заказа в разное время, чтобы увидеть, что нужные платёжные методы исчезают из списка.
  • Для тестирования можно временно изменить время сервера или подставить в код фиксированное время в $current_time.
  • Проверьте консоль браузера и логи WooCommerce на наличие ошибок.

Частые ошибки и способы их устранения

  • Платёжный метод не отключается: Проверьте правильность ID метода. Например, PayPal обычно имеет ID paypal, но у плагинов могут быть свои ID.
  • Время отображается неправильно: Проверьте часовой пояс в настройках WordPress, используйте current_time(), а не date().
  • Интервалы, переходящие через полночь, не работают: В коде реализована логика для таких интервалов, если не сработало – проверьте формат времени и сравнение.
  • Кэширование мешает обновлению списка платёжных методов: Отключите кэширование страниц или настройте исключения для страниц оформления заказа.

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

  • Не храните расписание в базе данных, если оно меняется редко – так проще и быстрее.
  • Для сложных сценариев (например, разные расписания для разных стран) лучше реализовать настройку через опции с кешированием.
  • Используйте current_time('H:i') для корректного учёта часового пояса WordPress.
  • Избегайте большого количества проверок в фильтре, чтобы не замедлять загрузку страницы оформления заказа.

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

МетодПлюсыМинусыПрименимость
Код в functions.phpПростота, контроль, нет лишних плагиновТребует навыков разработки, изменения в кодеЛучше для разработчиков и точечных задач
Плагины планировщиков платёжных методовГрафический интерфейс, удобствоМожет быть тяжеловесным, платным, нет гибкостиПодходит для непрофессионалов и крупных магазинов
Кастомные решения с настройками в админкеГибкость, интеграция с UIСложнее в реализации, поддержкеДля крупных проектов с командой разработчиков
Автоматическое создание и отправка push-уведомлений при изменении заказов WordPress
26.12.2025
Автоматический экспорт заказов WordPress в Google Sheets
27.01.2026
WooCommerce: решение проблемы с отправкой писем после оформления заказа
31.05.2026
Как удалить кэш в WordPress при изменении шаблонов и плагинов
05.12.2025
Как создать автоматически обновляемый список заказов в WordPress с фильтрами и AJAX
26.02.2026