wp-kurs.ru wordpress WP-Kurs

WooCommerce: автоматическое отключение неиспользуемых платёжных систем

Почему важно отключать неиспользуемые платёжные системы в 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
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙