WooCommerce: автоматическое отключение неактивных методов оплаты

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

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

Как отключить неактивные методы оплаты программно

WooCommerce позволяет управлять методами оплаты через хук woocommerce_available_payment_gateways. На основе проверки доступности каждого метода можно динамически исключать неактивные.

Пример кода для автоматического отключения методов оплаты без транзакций за последние 30 дней

add_filter('woocommerce_available_payment_gateways', 'disable_inactive_payment_gateways');
function disable_inactive_payment_gateways($available_gateways) {
    if (is_admin()) return $available_gateways; // Не менять в админке

    global $wpdb;
    $inactive_days_limit = 30; // Период без транзакций, после которого отключаем метод
    $cutoff_date = date('Y-m-d H:i:s', strtotime("-{$inactive_days_limit} days"));

    foreach ($available_gateways as $gateway_id => $gateway) {
        // Проверяем есть ли заказы с этим методом оплаты за последние 30 дней
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(1) FROM {$wpdb->prefix}posts AS posts
            INNER JOIN {$wpdb->prefix}postmeta AS meta ON posts.ID = meta.post_id
            WHERE posts.post_type = 'shop_order'
            AND posts.post_status IN ('wc-completed', 'wc-processing')
            AND meta.meta_key = '_payment_method'
            AND meta.meta_value = %s
            AND posts.post_date >= %s",
            $gateway_id, $cutoff_date
        ));

        if (intval($count) === 0) {
            unset($available_gateways[$gateway_id]);
        }
    }

    return $available_gateways;
}

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

Пошаговое внедрение решения

  1. Создайте дочернюю тему или используйте плагин для пользовательских функций (например, Code Snippets).
  2. Добавьте приведённый выше код в файл functions.php или в плагин.
  3. Настройте параметр $inactive_days_limit под ваши нужды — 30 дней можно увеличить или уменьшить.
  4. Очистите кеш сайта и браузера.
  5. Проверьте фронтенд оформления заказа — неактивные методы должны исчезнуть из списка.

Как проверить, что решение работает

  • Оформите заказ используя разные методы оплаты.
  • Измените дату заказа в базе (если есть тестовая среда) чтобы проверить отключение для методов без заказов.
  • Перейдите на страницу оплаты в гостевом режиме — методы с нулевой активностью за период должны отсутствовать.
  • Включите режим отладки, чтобы увидеть, какие методы доступны.

Частые ошибки и способы их исправления

  • Методы оплаты не отключаются
    Проверьте, что статус заказа действительно один из wc-completed или wc-processing. Возможно, нужны другие статусы.
  • Код отключает методы в админке
    Это может сломать оформление заказов вручную. В коде есть защита через is_admin(), убедитесь, что она не удалена.
  • Проблемы с производительностью
    Запрос к базе может быть тяжёлым при большом количестве заказов. Рассмотрите кеширование результата или выполнение проверки раз в сутки с сохранением в опции.
  • Методы оплаты с ошибками после обновления WooCommerce
    Проверяйте совместимость хуков и API после обновлений WooCommerce.

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

  • Используйте подготовленные запросы $wpdb->prepare() для предотвращения SQL-инъекций.
  • Кешируйте результат подсчёта заказов в transient API, чтобы не запускать тяжёлый запрос на каждой загрузке страницы оплаты.
  • Проверяйте, что отключение методов не мешает внутренним процессам, например, если есть заказы на стадии ожидания оплаты.
  • Резервное копирование перед изменениями — на случай отката кода.

Сравнение подходов к отключению неактивных методов оплаты

МетодПлюсыМинусы
Ручное отключение в админкеПростота, не требует кодаЗабываются, не автоматизировано
Программное отключение по активности (как в статье)Автоматизация, всегда актуальноНагрузка на БД, требует поддержки кода
Плагины управления методами оплатыУдобный UI, дополнительные функцииЗависимость от сторонних решений, возможны конфликты
WooCommerce: автоматическое изменение стоимости доставки по весу товаров
04.07.2026
Как добавить автоматическое обновление тем и плагинов в WordPress
15.04.2026
Как создать автоматический импорт продуктов в WooCommerce
16.02.2026
Как создать динамический фильтр по таксономиям в WordPress с примером кода
09.02.2026
Как настроить временный редирект в WordPress с помощью кода
07.01.2026