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

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

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

Обзор стандартных методов управления платёжными системами в WooCommerce

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

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

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

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

function wpshab_disable_payment_gateways_by_schedule( $available_gateways ) {
    $current_time = current_time( 'H:i' );
    $disable_start = '22:00'; // время начала отключения
    $disable_end = '06:00'; // время окончания отключения

    // Проверяем, находится ли текущее время в интервале отключения
    if ( $current_time >= $disable_start || $current_time <= $disable_end ) {
        // Здесь указываем ID платёжных методов для отключения
        $gateways_to_disable = array( 'cod', 'bacs' );
        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', 'wpshab_disable_payment_gateways_by_schedule' );

2. Используем WP-Cron для отключения платежных методов по расписанию без постоянной проверки

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

Пример регистрации WP-Cron задачи:

function wpshab_schedule_payment_gateways_toggle() {
    if ( ! wp_next_scheduled( 'wpshab_toggle_payment_gateways_hook' ) ) {
        wp_schedule_event( strtotime( '22:00:00' ), 'daily', 'wpshab_toggle_payment_gateways_hook' );
        wp_schedule_event( strtotime( '06:00:00' ), 'daily', 'wpshab_toggle_payment_gateways_hook' );
    }
}
add_action( 'wp', 'wpshab_schedule_payment_gateways_toggle' );

function wpshab_toggle_payment_gateways() {
    $current_time = current_time( 'H:i' );
    if ( $current_time === '22:00' ) {
        update_option( 'wpshab_payment_gateways_enabled', false );
    } elseif ( $current_time === '06:00' ) {
        update_option( 'wpshab_payment_gateways_enabled', true );
    }
}
add_action( 'wpshab_toggle_payment_gateways_hook', 'wpshab_toggle_payment_gateways' );

3. Модифицируем фильтр платёжных методов с учётом настройки из WP-Cron

function wpshab_disable_payment_gateways_by_option( $available_gateways ) {
    $enabled = get_option( 'wpshab_payment_gateways_enabled', true );
    if ( ! $enabled ) {
        $gateways_to_disable = array( 'cod', 'bacs' );
        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', 'wpshab_disable_payment_gateways_by_option' );

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

  • Установите на сайте плагин Query Monitor и проверьте, что фильтр woocommerce_available_payment_gateways применяется и отключает нужные методы.
  • В указанное время переходите в корзину и оформляйте заказ — отключённые методы не должны отображаться.
  • Проверьте опцию wpshab_payment_gateways_enabled в базе через phpMyAdmin или консоль WP-CLI, чтобы увидеть, что она меняется в соответствии с расписанием.

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

  • WP-Cron не запускается: В настройках хостинга или плагина кэширования может быть отключён WP-Cron. Проверьте, что DISABLE_WP_CRON в wp-config.php не установлена в true, или настройте системный cron для запуска wp-cron.php.
  • Неправильный формат времени: Функция current_time( 'H:i' ) возвращает время в формате 24 часа, учитывайте временную зону WordPress.
  • Идентификаторы платёжных методов указаны неверно: Узнайте ID методов через инспектор в настройках WooCommerce или функцию print_r(WC()->payment_gateways->payment_gateways()).
  • Фильтр применяется дважды: Следите за тем, чтобы не было нескольких фильтров с изменением одних и тех же платёжных методов, это может приводить к конфликтам.

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

  • Избегайте частых проверок времени в фильтрах — лучше использовать WP-Cron для изменения состояния один раз в заданное время.
  • Всегда тестируйте расписание на тестовом сайте, чтобы не потерять платежи из-за ошибочного отключения.
  • Для более сложных сценариев используйте плагины, например, Clearfy Pro, который помогает автоматизировать и оптимизировать настройки WooCommerce.
  • Храните настройки расписания в опциях, а не в transient, чтобы состояние не зависело от кеша.

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

МетодПлюсыМинусы
Фильтр с проверкой времени в реальном времениПростая реализация, не требует планировщикаНагрузка при каждом вызове, неэффективно для большого трафика
WP-Cron с обновлением опцииМеньшая нагрузка, точечное изменение состоянияЗависит от корректной работы WP-Cron, возможно задержки
Внешний системный cron + APIМаксимальная точность, не зависит от WP-CronСложнее в настройке, требует доступа к хостингу
Как автоматизировать удаление старых постов в WordPress через 30 дней
08.04.2026
WooCommerce: решение проблемы с отключёнными платёжными системами
06.05.2026
Как удалить верстку WordPress: лучшие плагины и примеры кода
09.11.2025
WooCommerce: автоматическое изменение цен по акции с помощью кода
16.05.2026
Как использовать REST API для создания кастомных эндпоинтов в WordPress
06.12.2025