wp-kurs.ru wordpress WP-Kurs

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

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

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

Проверить, какие платёжные методы активны и используются, можно по статистике заказов в WooCommerce. Но в стандартном интерфейсе нет автопереключения или отключения в зависимости от активности.

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

  • Перейдите в WooCommerce → Отчёты → Заказы и отфильтруйте по платёжным методам за последний месяц.
  • Если метод не фигурирует в заказах или используется менее 1% от общего числа, его можно считать неактивным.
  • Для более точного анализа можно выгрузить данные через WooCommerce REST API и посчитать количество заказов по каждому платежу.

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

Реализуем автоматическую проверку активности платёжных методов и их отключение через cron-задачу и хук WooCommerce.

1. Создаём функцию для анализа активности

function wc_disable_unused_payment_gateways() {
    $threshold = 5; // Минимальное количество заказов за период
    $period_days = 30; // Период анализа в днях

    global $wpdb;
    $date_from = date('Y-m-d H:i:s', strtotime("-{$period_days} days"));

    // Получаем количество заказов за период по каждому платёжному методу
    $results = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT meta_value AS payment_method, COUNT(*) AS orders_count
             FROM {$wpdb->prefix}postmeta pm
             INNER JOIN {$wpdb->prefix}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')
             AND p.post_date >= %s
             GROUP BY pm.meta_value",
            $date_from
        ),
        OBJECT_K
    );

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

    // Перебираем и отключаем неиспользуемые
    foreach ($available_gateways as $id => $gateway) {
        $count = isset($results[$id]) ? intval($results[$id]->orders_count) : 0;
        if ($count < $threshold) {
            // Отключаем платёжный метод
            update_option("woocommerce_{$id}_settings", array_merge(
                get_option("woocommerce_{$id}_settings", []),
                array('enabled' => 'no')
            ));
        }
    }
}

2. Добавляем wp-cron для автоматического запуска

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

add_action('wc_disable_unused_payment_gateways_cron', 'wc_disable_unused_payment_gateways');

3. Очистка расписания при деактивации плагина (если в плагине)

register_deactivation_hook(__FILE__, function() {
    $timestamp = wp_next_scheduled('wc_disable_unused_payment_gateways_cron');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wc_disable_unused_payment_gateways_cron');
    }
});

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

  • Через несколько дней после активации скрипта проверьте в WooCommerce → Настройки → Платёжные системы, что неиспользуемые методы стали неактивными.
  • Сделайте тестовый заказ, используя активный метод, и подтвердите, что он корректно отображается.
  • Проверьте логи ошибок сервера, чтобы убедиться, что скрипт работает без сбоев.

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

  • Платёжный метод не отключается: проверьте права на запись опций в базе, а также корректность ID метода (совпадает с ключом в настройках WooCommerce).
  • Ошибка при выполнении запроса SQL: убедитесь, что в базе есть таблицы с правильными префиксами, и что в базе есть заказы с соответствующим статусом.
  • Много ресурсов тратится на запрос: ограничьте период анализа или уменьшите частоту запуска wp-cron.
  • Метод отключается, хотя используется: проверьте правильность фильтра по статусам заказов и интервалу времени.

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

  • Для снижения нагрузки используйте transient API для кэширования результатов запроса на 12 часов.
  • Перед массовым отключением методов сделайте резервную копию настроек WooCommerce.
  • Ограничьте запуск cron-задачи до времени низкой нагрузки на сервер.
  • Если у вас несколько сайтов на одном хостинге, оптимизируйте запуск cron-задач централизованно.

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

МетодПлюсыМинусы
Ручная проверка и отключениеПростота, контроль пользователяТрудоёмко, забывается
Автоматический скрипт с wp-cronАвтоматизация, экономия времениНужна отладка, нагрузка на БД
Плагины мониторинга платежейГотовые интерфейсы, поддержкаПлатно, лишние зависимости
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее