Диагностика: зачем и когда нужно отключать платёжные методы автоматически
В интернет-магазинах на 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, требует навыков программирования | Средние и большие магазины, частые изменения |
| Плагины для расписания платежей | Интерфейс, готовые решения | Могут быть платными, не всегда подходят под уникальные задачи | Магазины без разработчиков |