Диагностика проблемы с автообновлением платежных методов в WooCommerce
Автоматическое обновление статусов и доступности платежных методов в WooCommerce может приводить к неожиданным ситуациям, когда устаревшие или временно недоступные методы остаются активными. Это особенно актуально, если вы хотите отключать определённые способы оплаты по времени, например, ночью или в выходные.
Часто встречается ситуация, когда платежный метод, отключённый вручную, снова активируется после обновления или синхронизации с внешними сервисами. Встроенных средств WooCommerce для автоматического отключения методов оплаты по расписанию нет, поэтому требуется кастомное решение.
Как отключить автообновление и настроить временное отключение платежных методов
Основные хуки и фильтры WooCommerce для управления платежными методами
Для управления доступностью платежных методов используется фильтр woocommerce_available_payment_gateways. Через него можно динамически исключать методы из списка доступных для пользователя.
Пошаговое решение: отключение платежного метода по времени
Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:
add_filter('woocommerce_available_payment_gateways', 'disable_payment_gateway_by_time');
function disable_payment_gateway_by_time($gateways) {
// Получаем текущее время в формате 24ч
$current_hour = (int) current_time('H');
// Платежные методы для отключения с 22:00 до 06:00
$methods_to_disable = ['cod', 'bacs']; // пример: наложенный платеж и банковский перевод
// Если текущее время в диапазоне 22:00 - 06:00
if ($current_hour >= 22 || $current_hour < 6) {
foreach ($methods_to_disable as $method_id) {
if (isset($gateways[$method_id])) {
unset($gateways[$method_id]);
}
}
}
return $gateways;
}В этом примере платежные методы с ID cod (оплата при доставке) и bacs (банковский перевод) будут недоступны с 22:00 до 06:00. Вы можете изменить список $methods_to_disable под свои нужды.
Проверка результата после внедрения
- Откройте страницу оформления заказа в WooCommerce в разное время суток (например, вручную измените время на сервере или используйте отладчик времени).
- Проверьте, что указанные методы оплаты исчезают из списка доступных в нужное время и появляются обратно после 6 утра.
- Для проверки можно добавить временный лог в файл, например:
error_log('Текущее время: ' . current_time('H') . ' - доступные методы: ' . implode(', ', array_keys($gateways)));Логи в wp-content/debug.log помогут понять, когда и какие методы доступны.
Частые ошибки и как их исправить
- Методы оплаты не отключаются: Проверьте, что ID методов оплаты правильные. Их можно посмотреть в WooCommerce > Настройки > Платежи или в коде плагинов.
- Время не соответствует реальному серверному времени: WooCommerce использует функцию
current_time(), которая учитывает часовой пояс WordPress. Убедитесь, что часовой пояс сайта установлен корректно. - Кэширование мешает увидеть изменения: Очистите кэш сайта и браузера, отключите кэширование на время теста.
- Код конфликтует с другими плагинами: Отключите другие плагины, которые могут изменять платежные методы, и проверьте работоспособность.
Практические советы по безопасности и производительности
- Используйте минимально необходимый код в
functions.phpи тестируйте на тестовом сайте перед внедрением на продакшн. - Не храните чувствительные данные в коде, лучше используйте настройки в админке с помощью опций или настроек плагина.
- Для сложных расписаний рассмотрите использование WP-Cron для изменения опций или статусов методов оплаты, чтобы не нагружать фильтр каждый раз.
Сравнение способов отключения платежных методов по времени
| Способ | Код | Плагин | Компромисс |
|---|---|---|---|
Фильтр woocommerce_available_payment_gateways | Да, гибко | Нет | Требует навыков программирования |
| Плагины расписания платежей | Нет | Может быть (редко) | Меньше контроля и гибкости |
| WP-Cron для автоотключения | Да, с дополнительным кодом | Нет (обычно кастом) | Сложнее в настройке, но лучше для сложных расписаний |