wpcodes.ru wordpress WP Codеs

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

Диагностика проблемы: зачем отключать неактивные методы оплаты

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

Как отследить активность методов оплаты в WooCommerce

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

Получение методов оплаты и последние даты их использования

Пример кода для сбора данных по методам оплаты и дате их последнего использования:

function get_payment_methods_last_used_dates() {
    global $wpdb;
    $results = $wpdb->get_results(
        "SELECT meta_value AS payment_method, MAX(post_date) AS last_used 
         FROM {$wpdb->prefix}posts AS posts
         INNER JOIN {$wpdb->prefix}postmeta AS pm ON posts.ID = pm.post_id
         WHERE posts.post_type = 'shop_order'
         AND posts.post_status IN ('wc-completed', 'wc-processing')
         AND pm.meta_key = '_payment_method'
         GROUP BY meta_value"
    );
    $methods_last_used = [];
    if ($results) {
        foreach ($results as $row) {
            $methods_last_used[$row->payment_method] = $row->last_used;
        }
    }
    return $methods_last_used;
}

Этот SQL-запрос собирает по всем обработанным и завершенным заказам дату последнего использования каждого метода оплаты.

Пошаговое решение для автоматического отключения неактивных методов оплаты

1. Получите список всех доступных методов оплаты.

2. Получите даты последнего использования каждого метода (см. код выше).

3. Сравните дату с текущей и определите, какие методы не использовались за пределами допустимого периода (например, 90 дней).

4. Отключите неактивные методы оплаты программно, изменяя настройки WooCommerce.

Пример функции для отключения методов оплаты, неактивных более 90 дней

function disable_inactive_payment_gateways() {
    $threshold_days = 90;
    $methods_last_used = get_payment_methods_last_used_dates();

    // Получаем текущие методы оплаты из опций
    $options = get_option('woocommerce_settings');
    if (!isset($options['woocommerce_payment_gateways'])) {
        return;
    }

    $active_gateways = $options['woocommerce_payment_gateways'];

    $updated_gateways = $active_gateways;
    $now = time();

    foreach ($active_gateways as $gateway_id => $status) {
        if (!isset($methods_last_used[$gateway_id])) {
            // Метод оплаты не использовался ни разу, считаем неактивным
            $last_used_time = 0;
        } else {
            $last_used_time = strtotime($methods_last_used[$gateway_id]);
        }

        $diff_days = ($now - $last_used_time) / DAY_IN_SECONDS;

        if ($diff_days > $threshold_days) {
            $updated_gateways[$gateway_id] = 'no'; // отключаем метод
        }
    }

    if ($updated_gateways !== $active_gateways) {
        update_option('woocommerce_payment_gateways', $updated_gateways);
    }
}

Для запуска функции рекомендуется использовать WP-Cron или вызывать вручную из админки.

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

  • Перейдите в WooCommerce > Настройки > Оплата и проверьте статус всех методов.
  • Создайте тестовый заказ и проверьте, что неактивные методы отсутствуют в списке способов оплаты.
  • Можно добавить логирование в функцию отключения для фиксации изменений.

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

  • Методы оплаты не отключаются: проверьте правильность ключа в опции woocommerce_payment_gateways. В новых версиях WooCommerce настройки методов могут храниться в отдельных опциях, например woocommerce__settings.
  • SQL-запрос не возвращает данные: убедитесь, что в базе есть заказы со статусом wc-completed или wc-processing и что поле _payment_method заполнено.
  • Изменения не применяются сразу: проверьте, нет ли кэширования опций или используйте очистку кэша после обновления.

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

  • SQL-запрос может быть ресурсоемким на больших базах. Для оптимизации используйте WP-Cron с кешированием результатов в транзиенты.
  • Перед массовым обновлением настроек сделайте бэкап базы.
  • Добавьте проверку прав пользователя, если реализуете запуск функции из админки.
  • Для управления методами оплаты лучше использовать фильтр 'woocommerce_available_payment_gateways' для динамического отключения, если не хотите менять настройки в базе.

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

МетодПлюсыМинусыПример кода
Изменение опций WooCommerce Настройки сохраняются в базе, методы полностью отключены Нужно обновлять опции, возможны конфликты с другими плагинами update_option('woocommerce_payment_gateways', ...)
Фильтр 'woocommerce_available_payment_gateways' Динамическое отключение без изменения опций, безопасно Методы видны в настройках, но не доступны клиентам add_filter('woocommerce_available_payment_gateways', function($gateways) { ... })
Отключение вручную в админке Простое, не требует кода Не подходит для большого количества методов, не автоматично WooCommerce > Настройки > Оплата
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее