Почему важно отключать неиспользуемые платёжные системы в WooCommerce
В интернет-магазинах на WooCommerce с большим количеством платёжных шлюзов часто возникают проблемы с производительностью и удобством пользователя. Неиспользуемые платёжные системы могут замедлять процесс оформления заказа, создавать путаницу и увеличивать нагрузку на сервер. Автоматическое отключение таких платёжных методов поможет повысить скорость, безопасность и удобство.
Диагностика: как определить неиспользуемые платёжные системы
Для начала нужно понять, какие платёжные системы не используются или используются слишком редко.
- Анализ статистики заказов: В WooCommerce перейдите в WooCommerce > Отчёты > Заказы и посмотрите, какие платёжные методы успешно применяются.
- Использование плагина для логирования оплат: Плагины типа WooCommerce Stripe или PayPal Checkout часто ведут логи. Их можно проанализировать для выявления активности.
- Анализ базы данных: Выполните SQL-запрос к таблице
wp_postsс типомshop_orderи мета-ключом_payment_methodдля подсчёта заказов по платёжным системам:
SELECT meta_value AS payment_method, COUNT(*) AS orders_count
FROM wp_postmeta pm
JOIN wp_posts p ON pm.post_id = p.ID
WHERE pm.meta_key = '_payment_method'
AND p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-processing')
GROUP BY meta_value
ORDER BY orders_count ASC;
По количеству заказов можно судить об активности платёжной системы.
Пошаговое решение: автоматическое отключение неиспользуемых платёжных систем
Реализуем фильтр на основе WooCommerce хука woocommerce_available_payment_gateways, который отключит платёжные методы с количеством заказов меньше заданного порога.
1. Создаём функцию подсчёта заказов по платёжным методам
function get_payment_methods_usage_threshold( $threshold = 5 ) {
global $wpdb;
$query = $wpdb->prepare(
"SELECT meta_value AS payment_method, COUNT(*) AS orders_count
FROM {$wpdb->postmeta} pm
JOIN {$wpdb->posts} p ON pm.post_id = p.ID
WHERE pm.meta_key = '_payment_method'
AND p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-processing')
GROUP BY meta_value
HAVING orders_count < %d",
$threshold
);
return $wpdb->get_col( $query );
}
2. Фильтруем доступные платёжные системы по результатам функции
add_filter( 'woocommerce_available_payment_gateways', 'disable_unused_payment_gateways' );
function disable_unused_payment_gateways( $available_gateways ) {
if ( is_admin() ) {
return $available_gateways; // не трогаем панель администратора
}
$threshold = 5; // минимальное количество заказов для активации
$unused_gateways = get_payment_methods_usage_threshold( $threshold );
foreach ( $unused_gateways as $gateway_id ) {
if ( isset( $available_gateways[ $gateway_id ] ) ) {
unset( $available_gateways[ $gateway_id ] );
}
}
return $available_gateways;
}
Код отключит платёжные системы, у которых меньше 5 заказов со статусом «обработан» или «завершён».
Проверка результата
- Перейдите на страницу оформления заказа в режиме гостя (неавторизованным пользователем).
- Убедитесь, что платёжные системы с низкой статистикой не отображаются в списке доступных способов оплаты.
- Для проверки можно временно снизить порог
$thresholdдо 1, чтобы увидеть эффект сразу. - Проверьте, что в админке WooCommerce > Настройки > Платежи отключения не произошло — управление остаётся в админке, код только скрывает методы на фронте.
Частые ошибки и их исправление
- Не отключаются платёжные методы: Возможно, хук вызывается слишком рано или поздно. Убедитесь, что код находится в functions.php активной темы или в плагине, и что WooCommerce активен.
- Все методы отключились: Значит, порог слишком высокий, либо база данных не содержит заказов с нужными статусами. Проверьте SQL-запрос напрямую в базе.
- Ошибка SQL: Проверьте префиксы таблиц и права доступа к базе данных.
- Платёжные методы не отображаются в админке: Код не должен влиять на админскую часть, добавьте проверку
is_admin().
Практические советы по безопасности и производительности
- Кэширование результатов: Для снижения нагрузки базы данных кэшируйте результаты функции
get_payment_methods_usage_thresholdс помощьюset_transientна 10–15 минут. - Логирование изменений: Ведите лог отключённых платёжных систем для последующего аудита, например, через
error_logили сторонние сервисы. - Обновление порога: Подбирайте порог отключения с учётом специфики вашего магазина — слишком низкий порог не даст эффекта, слишком высокий может случайно отключить нужные методы.
Сравнение вариантов реализации
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Ручное отключение в админке | Просто, не требует кода | Требует постоянного мониторинга и ручной работы | WooCommerce > Настройки > Платежи |
| Код с автоматическим отключением | Автоматизация, экономия времени | Требуется настройка и тестирование | Пример кода выше в статье |
| Использование сторонних плагинов для управления оплатой | Расширенные настройки, готовые решения | Дополнительные зависимости, могут быть платными | Плагины типа Conditional Payment Gateways |