Диагностика проблемы: зачем отключать платёжные системы автоматически
В WooCommerce бывают ситуации, когда нужно ограничить доступность определённых способов оплаты в зависимости от параметров заказа — например, по сумме, статусу пользователя или региону доставки. Без автоматизации такие ограничения приходится делать вручную или через сложные условия в плагинах, что не всегда удобно и быстро.
Типичные ситуации:
- Запрет оплаты наложенным платежом для заказов выше 10000 рублей.
- Отключение способов оплаты для неподтверждённых пользователей.
- Блокировка некоторых методов оплаты при выборе определённого способа доставки.
Как проверить, что платёжные системы отключаются по условиям
Для диагностики откройте страницу оформления заказа и последовательно изменяйте параметры заказа (сумму, адрес, статус пользователя) — нужные методы оплаты должны пропадать или появляться.
Если этого не происходит, значит, условия не применяются или есть конфликт с другими плагинами/темой.
Пошаговое решение: код для отключения платёжных систем по условиям
Самый надёжный и гибкий способ — подключить фильтр woocommerce_available_payment_gateways в functions.php вашей темы или в кастомном плагине.
Пример: отключаем платежи «наложенным платежом» для заказов выше 10000 рублей и для гостей сайта.
add_filter('woocommerce_available_payment_gateways', 'custom_disable_payment_gateways_based_on_conditions', 10, 1);
function custom_disable_payment_gateways_based_on_conditions($available_gateways) {
if (is_admin()) return $available_gateways; // не трогаем админку
$minimum_amount = 10000;
$current_user = wp_get_current_user();
$cart_total = WC()->cart->total;
// Отключаем наложенный платеж для гостей и если сумма больше лимита
if (($cart_total > $minimum_amount) || !$current_user->exists()) {
if (isset($available_gateways['cod'])) { // 'cod' — ID наложенного платежа
unset($available_gateways['cod']);
}
}
return $available_gateways;
}Пояснения:
woocommerce_available_payment_gateways— фильтр для изменения доступных методов оплаты.cod— ID платежного шлюза (наложенный платеж). Для других методов нужно использовать их ID, можно посмотреть в WooCommerce > Настройки > Платежи.- Проверяем сумму корзины и авторизацию пользователя.
Расширение: отключение по способу доставки
Если нужно отключить оплату по способу доставки, например, «Самовывоз» — добавьте проверку:
$chosen_methods = WC()->session->get('chosen_shipping_methods');
if (is_array($chosen_methods) && in_array('local_pickup', $chosen_methods)) {
unset($available_gateways['cod']);
}Как проверить, что решение работает
- Очистите кэш сайта и браузера, если есть кэш-плагины.
- Зайдите на страницу оформления заказа.
- Установите сумму корзины выше 10000 рублей и проверьте, что «Наложенный платёж» исчез.
- Сделайте заказ как гость и как авторизованный пользователь, чтобы проверить условие на пользователя.
- Выберите способ доставки «Самовывоз» и убедитесь, что нужные способы оплаты отключены.
Частые ошибки и их исправление
- Платёжный метод не отключается: проверьте правильность ID платежного шлюза. Для этого зайдите в WooCommerce > Настройки > Платежи и посмотрите slug метода (например, 'cod', 'bacs', 'paypal').
- Ошибка в админке при сохранении настроек: убедитесь, что код подключён только во фронтенде, добавьте проверку
if (is_admin()) return $available_gateways;. - Кэш мешает изменениям: отключите или очистите кэш плагинов и браузера.
- Другие плагины конфликтуют: временно отключите другие плагины, чтобы проверить влияние.
Практические советы по безопасности и производительности
- Не вставляйте код напрямую в functions.php основной темы — используйте дочернюю тему или отдельный плагин, чтобы не потерять изменения при обновлении.
- Проверяйте производительность — если условия сложные, кешируйте результаты или используйте transient API.
- Тестируйте на staging-сайте, чтобы не сломать работу магазина в рабочем режиме.
Сравнение способов реализации
| Способ | Плюсы | Минусы | Пример кода |
|---|---|---|---|
| Код в functions.php | Полный контроль, нет лишних плагинов | Требует навыков PHP, возможны ошибки | В статье |
| Плагины для условий оплаты (Conditional Payment Gateways) | Простой интерфейс для настройки | Нагрузка на сайт, платные версии | WooCommerce Conditional Shipping and Payments |
| Использование хуков и сторонних сервисов | Можно гибко настраивать | Сложность, зависит от сторонних API | Настройка через REST API |