Диагностика задачи: зачем и когда нужно отключать платёжные методы автоматически
В интернет-магазинах на WooCommerce часто возникает необходимость временно отключать определённые способы оплаты. Например, платёжный шлюз проходит техническое обслуживание ночью, или вы хотите отключить наложенный платёж в выходные, когда нет курьеров. Ручное отключение неудобно и может привести к ошибкам. Автоматизация по расписанию решает эти проблемы.
Как реализовать автоматическое отключение платёжных методов по времени
Основные шаги и логика работы
Идея в том, чтобы динамически фильтровать доступные платёжные методы при загрузке страницы оформления заказа, ориентируясь на текущее время и день недели. Для этого WooCommerce предоставляет фильтр woocommerce_available_payment_gateways.
Мы напишем функцию, которая будет проверять текущее время и дату, и если они попадают в запрещённый интервал — удалять нужные платёжные методы из массива доступных.
Пример кода для отключения платёжного метода "cod" (наложенный платёж) по расписанию
add_filter('woocommerce_available_payment_gateways', 'disable_payment_gateways_by_schedule');
function disable_payment_gateways_by_schedule($gateways) {
// Получаем текущий час и день недели
$current_hour = (int) date('G'); // 0-23
$current_day = (int) date('N'); // 1 (понедельник) - 7 (воскресенье)
/*
* Пример: отключаем "наложенный платёж" (cod)
* по будням с 22:00 до 6:00 и в выходные полностью
*/
// Отключение в выходные (суббота=6, воскресенье=7)
if (in_array($current_day, [6,7])) {
if (isset($gateways['cod'])) {
unset($gateways['cod']);
}
}
// Отключение ночью в будни
if ($current_day >= 1 && $current_day <= 5) {
if ($current_hour >= 22 || $current_hour < 6) {
if (isset($gateways['cod'])) {
unset($gateways['cod']);
}
}
}
return $gateways;
}Проверка результата после внедрения кода
- Перейдите на страницу оформления заказа в разное время суток и проверьте наличие нужного платёжного метода.
- Для проверки на локальном сервере можно временно изменить в коде значения
$current_hourи$current_dayна фиксированные, чтобы имитировать разные периоды. - Включите режим отладки WooCommerce и проверьте, что фильтр применяется без ошибок.
- Проверьте, что при отключении платёжного метода он пропадает из списка, а остальные методы остаются доступными.
Частые ошибки и как их исправить
- Метод оплаты не отключается: Проверьте, что ID платёжного метода написан правильно. Например, для COD это "cod". Используйте
print_r(array_keys($gateways));внутри функции для отладки. - Время не совпадает с ожидаемым: Убедитесь, что сервер и WordPress используют правильный часовой пояс (
Settings > General > Timezone). - Кэширование мешает обновлению: Если сайт использует кэш, очистите его после внедрения изменений, иначе старый список платёжных методов может показываться.
- Код вызывает ошибки PHP: Проверьте синтаксис и используйте
error_logили отладчик для выявления проблем.
Практические советы по безопасности и производительности
- Не добавляйте тяжелые операции в этот фильтр — он выполняется при каждой загрузке страницы оформления заказа.
- Если расписание сложное, лучше вынести его в отдельную функцию или даже в настройку админки.
- Для улучшения безопасности не храните в коде пароли и API-ключи платёжных систем, только логику отключения.
- Тестируйте работу на staging-сервере перед внедрением на живой сайт.
Альтернативы: плагины vs кастомный код
| Способ | Плюсы | Минусы | Пример |
|---|---|---|---|
| Плагин (например, Conditional Shipping and Payments) | Графический интерфейс, гибкие правила | Платно, может нагружать сайт | WooCommerce CSP |
| Кастомный код (пример выше) | Легковесный, точечное решение, бесплатный | Требует навыков PHP, ограниченный функционал | Код в functions.php или отдельном плагине |