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

Диагностика проблемы с платёжными системами WooCommerce

Часто в магазинах на WooCommerce остаются активными платёжные методы, которые не используются или неактуальны для текущих условий бизнеса. Это приводит к путанице у покупателей, снижению конверсии и усложнению администрирования. Чтобы выявить такие платёжные системы, нужно проанализировать статистику заказов и логи транзакций, а также опросить службу поддержки.

Как проверить активность платёжных методов

  • Перейдите в WooCommerce > Отчёты > Заказы и посмотрите, через какие платёжные системы были совершены покупки за последние 3-6 месяцев.
  • В разделе WooCommerce > Настройки > Платежи проверьте, какие методы включены.
  • Попросите менеджеров проверить, не поступают ли жалобы или вопросы по некоторым платёжным системам.

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

Чтобы автоматически отключать платёжные системы, которые не использовались в течение заданного периода (например, 3 месяца), реализуем PHP-скрипт, запускаемый через WP-Cron. Скрипт проверит заказы и деактивирует методы, которые не применялись.

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

function wc_auto_disable_unused_payment_gateways() {
    if ( ! class_exists( 'WC_Order_Query' ) ) {
        return;
    }

    // Период проверки в днях
    $days_inactive = 90;
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days_inactive} days" ) );

    // Получаем список всех активных платёжных шлюзов
    $available_gateways = WC()->payment_gateways()->get_available_payment_gateways();

    // Массив для хранения активных шлюзов за период
    $used_gateways = [];

    // Запрашиваем заказы за последние 90 дней
    $args = [
        'limit' => -1,
        'orderby' => 'date',
        'order' => 'DESC',
        'date_created' => '>' . $date_threshold,
        'return' => 'ids',
        'status' => ['completed', 'processing']
    ];

    $orders = wc_get_orders( $args );

    foreach ( $orders as $order_id ) {
        $order = wc_get_order( $order_id );
        $payment_method = $order->get_payment_method();
        if ( $payment_method ) {
            $used_gateways[ $payment_method ] = true;
        }
    }

    // Получаем текущие настройки активных методов
    $option = get_option( 'woocommerce_payment_gateways' );

    if ( ! is_array( $option ) ) {
        return;
    }

    $updated = false;

    foreach ( $available_gateways as $gateway_id => $gateway ) {
        // Если метод не использовался, отключаем
        if ( ! isset( $used_gateways[ $gateway_id ] ) ) {
            if ( isset( $option[ $gateway_id ] ) && $option[ $gateway_id ] === 'yes' ) {
                $option[ $gateway_id ] = 'no';
                $updated = true;
            }
        }
    }

    if ( $updated ) {
        update_option( 'woocommerce_payment_gateways', $option );
    }
}
add_action( 'wp_loaded', 'wc_auto_disable_unused_payment_gateways' );

2. Настройка WP-Cron для ежедневного запуска задачи

function wc_schedule_payment_gateways_check() {
    if ( ! wp_next_scheduled( 'wc_daily_payment_gateways_check' ) ) {
        wp_schedule_event( time(), 'daily', 'wc_daily_payment_gateways_check' );
    }
}
add_action( 'wp', 'wc_schedule_payment_gateways_check' );

add_action( 'wc_daily_payment_gateways_check', 'wc_auto_disable_unused_payment_gateways' );

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

После активации кода:

  • Проверьте через админку WooCommerce > Настройки > Платежи, что методы, которые не использовались последние 90 дней, отключены.
  • Сделайте тестовый заказ и убедитесь, что активные платёжные системы работают корректно.
  • Посмотрите логи WP-Cron, например, с помощью плагина WP Crontrol, чтобы убедиться, что событие срабатывает ежедневно.

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

  • Ошибка: Платёжные системы не отключаются.
    Причина: Неправильное чтение или обновление опции woocommerce_payment_gateways. В разных версиях WooCommerce структура может отличаться.
    Решение: Используйте WP-CLI или var_dump для проверки содержимого опции. Возможно, нужно обновлять другую опцию или использовать объект настроек.
  • Ошибка: Скрипт влияет на все платёжные системы, включая обязательные.
    Решение: Добавьте в код фильтр для исключения критичных методов (например, наличные или оплата при получении).
  • Ошибка: Скрипт вызывает нагрузку при большом количестве заказов.
    Решение: Ограничьте выборку заказов, добавьте кеширование или выполняйте проверку раз в неделю.

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

  • Используйте capability проверки, например current_user_can('manage_woocommerce'), если функция вызывается вручную.
  • Для больших магазинов с тысячами заказов используйте SQL-запросы напрямую, чтобы получать платёжные методы быстрее.
  • Резервируйте базу перед внедрением подобных автоматизаций.
  • При необходимости логируйте отключения платёжных систем в отдельный файл или систему мониторинга.

Сравнение вариантов реализации

МетодПлюсыМинусы
Плагин автодеактивации (например, Custom plugin)Простота установки, готовый интерфейсМожет быть избыточным, нагрузка, лицензии
Собственный код с WP-CronПолный контроль, оптимизация под сайтТребует знаний, возможность ошибок
Ручное управлениеМаксимальная безопасность, контрольТрудозатратно, забываемость
Как удалить автозаголовки в WooCommerce без плагинов
18.04.2026
Автоматическое отключение неиспользуемых платёжных систем в WooCommerce
15.06.2026
Как автоматизировать удаление оставленных корзин в WordPress
12.01.2026
Как использовать REST API в WordPress для создания плагинов
16.11.2025
Как автоматически отключать неиспользуемые плагины в WordPress
10.03.2026