Диагностика проблемы: зачем отключать неиспользуемые платежные методы
В интернет-магазинах на WooCommerce часто подключают несколько способов оплаты. Однако не все методы актуальны постоянно — например, некоторые платёжные шлюзы работают только в определённые дни недели или часы. Оставлять неиспользуемые методы активными приводит к путанице у покупателей и возможным ошибкам при оформлении заказа.
Проверить, какие методы оплаты используются, можно в админке WooCommerce > Настройки > Платежи. Но чтобы автоматизировать отключение и включение в зависимости от времени, нужно программное решение.
Шаги решения: реализация отключения платежных методов по расписанию
1. Определение расписания для каждого метода оплаты
Для примера возьмём два метода: cod (наложенный платёж), доступный по будням, и cheque (оплата чеком), доступный только по выходным.
2. Хук для фильтрации доступных методов оплаты
WooCommerce предоставляет фильтр woocommerce_available_payment_gateways, который позволяет изменять список активных методов перед показом покупателю. Мы будем использовать его для динамического отключения.
3. Пример кода для functions.php или собственного плагина
add_filter('woocommerce_available_payment_gateways', 'wporder_disable_payment_methods_by_schedule');
function wporder_disable_payment_methods_by_schedule($available_gateways) {
if (is_admin()) return $available_gateways; // Не трогаем админку
$current_day = date('N'); // 1 (Пн) - 7 (Вс)
// Отключаем наложенный платеж по выходным (6 - Сб, 7 - Вс)
if (isset($available_gateways['cod']) && in_array($current_day, [6,7])) {
unset($available_gateways['cod']);
}
// Отключаем оплату чеком по будням (1-5)
if (isset($available_gateways['cheque']) && $current_day >= 1 && $current_day <= 5) {
unset($available_gateways['cheque']);
}
return $available_gateways;
}4. Автоматизация с помощью WP-Cron
Если нужно выполнять дополнительные действия или логировать изменения, можно создать WP-Cron задачу, которая будет запускаться по расписанию. Но для базового отключения хватает фильтра.
Проверка результата после внедрения
Чтобы проверить, что методы оплаты отключаются корректно:
- Перейдите на страницу оформления заказа в магазине в разное время/дни.
- Убедитесь, что в выходные
codотсутствует, а в будни отсутствуетcheque. - Для отладки можно временно добавить
error_logвнутри функции и смотреть логи сервера.
Частые ошибки и как их исправить
- Методы не отключаются: возможно, код не подключён или конфликтует с кешем. Очистите кеш, проверьте, что функция вызывается (например, через
error_log). - Платежные методы в админке не меняются: фильтр влияет только на фронтенд. Для админки нужна отдельная логика, если требуется.
- Неверное время сервера: функция зависит от
date(), которая использует серверное время. Проверьте часовой пояс WordPress (Settings > General) и сервера.
Практические советы по безопасности и производительности
- Не используйте тяжелые операции внутри фильтра
woocommerce_available_payment_gateways, чтобы не замедлять оформление заказа. - Используйте
wp_cache_set, если расписания или условия сложные и требуют вычислений. - Проверяйте, что отключение методов оплаты не приводит к отсутствию доступных вариантов — оставьте хотя бы один метод всегда активным.
Сравнение подходов к отключению платежных методов
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
Использование фильтра woocommerce_available_payment_gateways | Динамическое отключение на фронтенде по условиям | Простота, динамичность, не требует внешних задач | Зависит от времени сервера, не влияет на админку |
| WP-Cron задачи для изменения статусов методов | Изменение активных методов через обновление опций или настроек | Гибкость, можно логировать изменения | Сложнее в реализации, возможны задержки выполнения |
| Плагины управления платежами по расписанию | Готовые решения с UI | Удобство для неразработчиков | Могут быть платными, дополнительные зависимости |