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

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

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

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

Как проверить, активен ли платёжный метод

Перейдите в WooCommerce → Настройки → Платежи. Каждый метод имеет переключатель «Включить». При программном управлении можно проверить статус так:

function is_payment_method_enabled($method_id) {
    $gateways = WC()->payment_gateways()->get_available_payment_gateways();
    return isset($gateways[$method_id]);
}

// Пример использования
if (is_payment_method_enabled('cod')) {
    error_log('Метод наложенного платежа активен');
} else {
    error_log('Метод наложенного платежа отключен');
}

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

1. Создаём кастомный cron-задание для отключения/включения методов

Добавьте в functions.php вашей темы или в кастомный плагин следующий код:

add_action('wp', 'schedule_payment_method_toggle_cron');
function schedule_payment_method_toggle_cron() {
    if (!wp_next_scheduled('toggle_payment_methods_event')) {
        // Запускаем cron раз в час
        wp_schedule_event(time(), 'hourly', 'toggle_payment_methods_event');
    }
}

add_action('toggle_payment_methods_event', 'toggle_payment_methods_by_schedule');

function toggle_payment_methods_by_schedule() {
    $current_hour = (int) current_time('H'); // Час по часовому поясу WP

    // Пример: отключаем 'cod' (наложенный платеж) с 22 до 6 утра
    $method_id = 'cod';
    $option_name = 'woocommerce_' . $method_id . '_settings';
    $settings = get_option($option_name, []);

    if ($current_hour >= 22 || $current_hour < 6) {
        // Отключаем метод
        if (empty($settings['enabled']) || $settings['enabled'] !== 'no') {
            $settings['enabled'] = 'no';
            update_option($option_name, $settings);
            error_log("Платёжный метод {$method_id} отключен по расписанию");
        }
    } else {
        // Включаем метод
        if (empty($settings['enabled']) || $settings['enabled'] !== 'yes') {
            $settings['enabled'] = 'yes';
            update_option($option_name, $settings);
            error_log("Платёжный метод {$method_id} включен по расписанию");
        }
    }
}

2. Как проверить, что cron работает и методы переключаются

  • Проверьте наличие задачи в таблице wp_options с ключом cron. Можно использовать плагин WP Crontrol.
  • В логах (error_log) должны появляться сообщения об отключении/включении метода.
  • В админке WooCommerce → Платежи метод должен автоматически переключаться по времени.
  • На фронтенде в соответствующее время метод должен исчезать или появляться.

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

Чтобы убедиться, что автоматизация сработала:

  • Измените время сервера (или WP timezone) на тестовое (например, 23:00) и обновите страницу платежей — метод должен быть отключён.
  • Верните время на 10:00 — метод должен быть включён.
  • Сделайте тестовый заказ в рабочее и нерабочее время, убедитесь, что метод либо доступен, либо скрыт.

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

  • Метод не переключается: проверьте, активен ли cron WordPress (WP-Cron). Если нет реальных посещений сайта, задания могут не запускаться. Для решения — настройте системный cron на вызов wp-cron.php.
  • Изменения не сохраняются: убедитесь, что вы используете правильный ключ опции вида woocommerce_{payment_method}_settings и что структура массива соответствует стандарту WooCommerce.
  • Метод отображается, хотя отключён: проверьте кеширование сайта и браузера. Отключите кеш или очистите его.
  • Ошибка синтаксиса при добавлении кода: используйте IDE или отладчик PHP перед выкладкой, чтобы избежать фатальных ошибок.

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

  • Не добавляйте слишком частые cron-задачи. Запуск раз в час — оптимальный вариант для большинства случаев.
  • Логирование отключайте на рабочем сайте или направляйте логи в отдельный файл для мониторинга.
  • Используйте child-тему или отдельный плагин для кастомных функций, чтобы избежать потери изменений при обновлении тем и WooCommerce.
  • Если у вас много платёжных методов, для каждого создайте отдельную логику с индивидуальным расписанием в одной функции с массивом настроек.

Таблица сравнения способов автоматического отключения платёжных методов

МетодПлюсыМинусыПрименимость
Ручное отключение в админкеПросто, без кодаТребует ручного вмешательства, риск забытьМалый объём операций, редкие изменения
WP-Cron с кастомным кодомАвтоматизация, гибкость, возможность сложных условийЗависит от WP-Cron, требует навыков программированияСредние и большие магазины, частые изменения
Плагины для расписания платежейИнтерфейс, готовые решенияМогут быть платными, не всегда подходят под уникальные задачиМагазины без разработчиков
Оптимизация обработки заказов в WordPress: лучшие практики и примеры кода
07.11.2025
Автоматическое создание и отправка счетов (invoice) в WordPress при оформлении заказа
22.12.2025
Как автоматизировать изменение статьи на основе статистики просмотров в WordPress
30.03.2026
Как создать автоматический импорт товаров в WordPress из CSV файла
15.12.2025
WooCommerce: автоматическое удаление заказов по неоплаченному статусу
17.05.2026