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

Проблема: избыточное количество платёжных систем замедляет сайт и усложняет оформление заказа

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

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

Для начала нужно собрать статистику использования платёжных систем за определённый период (например, месяц). Это позволит определить, какие из них не применялись в заказах. Для диагностики используйте SQL-запрос к базе данных WooCommerce:

SELECT pm.meta_value AS payment_method, COUNT(p.ID) AS orders_count
FROM wp_posts p
INNER JOIN wp_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 p.post_date > NOW() - INTERVAL 30 DAY
GROUP BY pm.meta_value
ORDER BY orders_count DESC;

Этот запрос покажет, какие платёжные методы использовались в заказах за последние 30 дней и с каким количеством.

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

1. Создайте таблицу для хранения информации об отключённых платёжных шлюзах

Для хранения информации о том, какие шлюзы отключать, можно использовать опцию в базе данных WordPress:

update_option('wc_disabled_payment_gateways', ['bacs', 'cheque']);

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

Добавьте следующий код в functions.php вашей темы или в отдельный плагин:

add_filter('woocommerce_available_payment_gateways', 'disable_unused_payment_gateways');
function disable_unused_payment_gateways($gateways) {
    $disabled = get_option('wc_disabled_payment_gateways', []);
    if (empty($disabled)) {
        return $gateways;
    }
    foreach ($disabled as $gateway_id) {
        if (isset($gateways[$gateway_id])) {
            unset($gateways[$gateway_id]);
        }
    }
    return $gateways;
}

3. Автоматизация обновления списка отключаемых методов через WP-CLI или CRON

Для периодического обновления списка неиспользуемых платежных систем напишите скрипт, который проверяет статистику заказов и обновляет опцию:

function update_disabled_payment_gateways() {
    global $wpdb;
    $threshold = 1; // минимальное количество заказов за период
    $period_days = 30;
    
    $results = $wpdb->get_results($wpdb->prepare(
        "SELECT pm.meta_value AS payment_method, COUNT(p.ID) AS orders_count
         FROM {$wpdb->posts} p
         INNER 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 p.post_date > NOW() - INTERVAL %d DAY
         GROUP BY pm.meta_value",
         $period_days
    ));

    $used_methods = array_map(function($item) { return $item->payment_method; }, $results);
    $all_gateways = WC()->payment_gateways->payment_gateways();
    $disabled = [];

    foreach ($all_gateways as $gateway_id => $gateway) {
        if (!in_array($gateway_id, $used_methods)) {
            $disabled[] = $gateway_id;
        }
    }

    update_option('wc_disabled_payment_gateways', $disabled);
}

// Запускать через CRON или WP-CLI
// add_action('wp_loaded', 'update_disabled_payment_gateways');

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

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

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

  • Платёжный шлюз не отключается: Проверьте правильность ID шлюза. Используйте var_dump(array_keys(WC()->payment_gateways->payment_gateways())); для списка актуальных ID.
  • Сбой при вызове функции из-за отсутствия WC(): Убедитесь, что код запускается после инициализации WooCommerce, например, на хуке woocommerce_loaded или позже.
  • Удаление важных платёжных систем: Перед автоматическим отключением добавьте проверку на минимальный порог заказов и логи для контроля.

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

  • Не отключайте платёжные методы, если у вас мало данных или нестабильный поток заказов — это может негативно повлиять на UX.
  • Запускайте обновление списка отключённых платёжных систем не чаще одного раза в сутки, чтобы не перегружать базу данных.
  • Для критичных сайтов используйте резервное копирование опций перед автоматическим обновлением.
  • Оптимизируйте SQL-запрос, если база данных большого размера — добавьте индексы по post_type и post_status.

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

СпособПлюсыМинусыКогда использовать
Ручное отключение в настройках WooCommerceПросто, без кодаТребует вмешательства, не подходит для динамикиКогда число платёжных систем мало и редко меняется
Код с фильтром на основе опцииАвтоматизирует отключение, контролируемоНужно написать и поддерживать кодДля сайтов со средним количеством платёжных систем
Автоматическое обновление через CRON и статистику заказовПолная автоматизация, актуальные данныеСложнее в настройке, требуется тестированиеДля крупных магазинов с множеством платёжных методов
Как изменить автоматические сообщения WordPress
10.04.2026
WooCommerce: автоматическое удаление заказов по отмеченным статусам с отсрочкой
25.06.2026
Автоматическое удаление старых записей и данных в WordPress через CRON
26.03.2026
WooCommerce: автоматическое создание заказов и управление статусами через код
20.05.2026
Как автоматически отключать неиспользуемые плагины в WordPress
09.03.2026