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

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

Поддержание актуального и минимального набора платёжных методов в WooCommerce снижает риск ошибок при оформлении заказа, уменьшает нагрузку на сайт и сокращает время загрузки страниц. Кроме того, это повышает безопасность, снижая поверхность атаки за счёт отключения неиспользуемых интеграций.

Диагностика: как определить, какие платёжные системы не используются

Для начала нужно проанализировать статистику заказов за последний период (например, за 3-6 месяцев) и выяснить, какие платёжные методы не применялись или применялись крайне редко.

  • В WooCommerce перейдите в WooCommerce > Отчёты > Заказы.
  • Отфильтруйте заказы по платёжным методам.
  • Экспортируйте данные для более глубокого анализа (например, в CSV).

Если у вас есть доступ к базе данных, можно выполнить SQL-запрос для подсчёта заказов по методам оплаты:

SELECT payment_method, COUNT(ID) as count_orders
FROM wp_posts
JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
WHERE post_type = 'shop_order'
AND meta_key = '_payment_method'
GROUP BY payment_method
ORDER BY count_orders ASC;

Методы с нулевым или минимальным количеством заказов — кандидаты на отключение.

Пошаговое решение: как автоматически отключать неиспользуемые платёжные системы

1. Создание функционала для отслеживания активности платёжных методов

Реализуем cron-задачу, которая раз в неделю проверяет количество заказов за последний месяц по каждому платёжному методу и отключает те, что не использовались.

function disable_unused_payment_gateways() {
    if ( ! class_exists( 'WC_Payment_Gateways' ) ) {
        return;
    }

    $gateways = WC()->payment_gateways->payment_gateways();
    $unused_gateways = [];

    global $wpdb;
    $one_month_ago = date('Y-m-d H:i:s', strtotime('-30 days'));

    foreach ( $gateways as $id => $gateway ) {
        $count = $wpdb->get_var( $wpdb->prepare(
            "SELECT COUNT(p.ID) FROM {$wpdb->posts} p
             JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
             WHERE p.post_type = 'shop_order'
             AND p.post_status IN ('wc-completed', 'wc-processing')
             AND pm.meta_key = '_payment_method'
             AND pm.meta_value = %s
             AND p.post_date >= %s",
            $id,
            $one_month_ago
        ) );

        if ( intval($count) === 0 ) {
            $unused_gateways[] = $id;
        }
    }

    // Отключаем неиспользуемые шлюзы
    if ( ! empty( $unused_gateways ) ) {
        $options = get_option('woocommerce_payment_gateways_settings', []);
        foreach ( $unused_gateways as $gateway_id ) {
            if ( isset( $options[ $gateway_id ] ) ) {
                $options[ $gateway_id ]['enabled'] = 'no';
            }
        }
        update_option( 'woocommerce_payment_gateways_settings', $options );
    }
}

// Добавляем cron задачу
add_action( 'wp', function() {
    if ( ! wp_next_scheduled( 'disable_unused_payment_gateways_cron' ) ) {
        wp_schedule_event( time(), 'weekly', 'disable_unused_payment_gateways_cron' );
    }
});
add_action( 'disable_unused_payment_gateways_cron', 'disable_unused_payment_gateways' );

2. Ручное отключение платёжных систем через фильтр (для немедленных случаев)

Можно динамически отключать платёжные методы при загрузке страницы оформления заказа, например, если в админке стоит флаг «отключить». Добавим фильтр:

add_filter( 'woocommerce_available_payment_gateways', 'filter_unused_payment_gateways' );
function filter_unused_payment_gateways( $available_gateways ) {
    $disabled_gateways = get_option( 'disabled_payment_gateways', [] );

    foreach ( $disabled_gateways as $gateway_id ) {
        if ( isset( $available_gateways[ $gateway_id ] ) ) {
            unset( $available_gateways[ $gateway_id ] );
        }
    }
    return $available_gateways;
}

Проверка результата после внедрения

  • Перейдите на страницу оформления заказа и убедитесь, что неиспользуемые платёжные методы отсутствуют в списке.
  • В админке WooCommerce проверьте, что статус платёжных методов изменён на «отключено».
  • Просмотрите логи cron-задачи (например, через плагин WP Crontrol) для подтверждения срабатывания функции.

Частые ошибки и как их исправить

  • Методы не отключаются после cron: Проверьте, что cron запускается (используйте WP Crontrol для диагностики). Проверьте права на запись опций.
  • Неправильный ID платёжного метода: Используйте точные идентификаторы, как show в WooCommerce — можно вывести через print_r(array_keys(WC()->payment_gateways->payment_gateways()));.
  • Отключение нужных методов: Проверьте логику определения использования метода, чтобы не отключать методы с редкими заказами без причины.
  • Проблемы с кешем и кэш-плагинами: Очистите кеш после изменений, особенно если платёжные методы не обновляются на фронтенде.

Практические советы по безопасности и производительности

  • Не отключайте метод оплаты полностью, если он используется в отложенных или подписочных платежах.
  • Запускайте cron-задачи в не часы пик, чтобы избежать нагрузки.
  • Регулярно делайте бэкапы перед массовыми изменениями настроек.
  • Используйте WP-CLI для проверки статистики заказов для более масштабных сайтов.
  • Для сайтов с большим количеством платёжных методов и заказов — оптимизируйте SQL-запросы, добавляйте индексы по мета-ключам.

Сравнение способов отключения платёжных систем

МетодПлюсыМинусыПрименение
Ручное отключение через админку Просто, не требует кода Требует постоянного контроля Малые магазины, редко меняются методы
Автоматическое через cron и код Автоматизация, снижает рутину Требует тестирования, возможны ошибки при неверной логике Средние и крупные магазины с большим ассортиментом методов оплаты
Фильтр отключения в runtime Гибко, можно быстро включать/выключать Не сохраняет состояние в админке Временное решение, тестирование
Автоматическое удаление неиспользуемых таксономий в WordPress
01.04.2026
Автоматическое закрытие открытых тикетов поддержки в WordPress
22.02.2026
Как отключить или полностью удалить редактор Gutenberg в WordPress
13.01.2026
Как автоматически отслеживать изменения в WordPress с помощью Webhook'ов
08.03.2026
Как создать автоматический кэш в WordPress с использованием Redis
07.02.2026