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

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

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

Задача — автоматически отключать способы оплаты WooCommerce на основе определённых условий, например, времени суток, настроек или внешних сигналов.

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

Для начала выясним, как WooCommerce хранит и обрабатывает методы оплаты. Все методы оплаты — это классы, наследуемые от WC_Payment_Gateway. Их активность определяется настройками в админке и дополнительной логикой в коде.

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

add_action('woocommerce_review_order_before_payment', function() {
    $available_gateways = WC()->payment_gateways->get_available_payment_gateways();
    echo '<pre>';
    print_r(array_keys($available_gateways));
    echo '</pre>';
});

Этот код поможет проверить, какие методы оплаты WooCommerce считает доступными для текущего пользователя и условий.

Пошаговое решение: автоматическое отключение способов оплаты по условию

Рассмотрим задачу: отключить способ оплаты «Чек» (ID cheque) в нерабочие часы (с 22:00 до 08:00).

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

add_filter('woocommerce_available_payment_gateways', 'disable_payment_gateway_during_night_hours');
function disable_payment_gateway_during_night_hours($available_gateways) {
    $current_hour = (int) current_time('H');
    if ($current_hour >= 22 || $current_hour < 8) {
        if (isset($available_gateways['cheque'])) {
            unset($available_gateways['cheque']);
        }
    }
    return $available_gateways;
}

Код проверяет текущее время по часовому поясу сайта и удаляет способ оплаты из списка доступных, если время попадает в заданный интервал.

Расширение логики: отключение по внешнему флагу

Если нужно отключать способ оплаты на основании состояния API платежного шлюза, можно использовать transient или option с флагом. Пример:

add_filter('woocommerce_available_payment_gateways', 'disable_gateway_by_flag');
function disable_gateway_by_flag($available_gateways) {
    $disable_cheque = get_option('disable_cheque_payment', 'no');
    if ($disable_cheque === 'yes' && isset($available_gateways['cheque'])) {
        unset($available_gateways['cheque']);
    }
    return $available_gateways;
}

В админке можно переключать опцию disable_cheque_payment через update_option('disable_cheque_payment', 'yes'); или вручную через базу данных.

Проверка результата

Чтобы проверить, что способ оплаты отключается:

  • Перейдите на страницу оформления заказа.
  • Убедитесь, что в нужное время способ оплаты «Чек» отсутствует в списке.
  • Для отладки временно добавьте var_dump($available_gateways) внутри фильтра.

Если используется внешний флаг, измените опцию и проверьте, что способ появляется или исчезает.

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

  • Метод оплаты не отключается: Проверьте правильность ID способа оплаты (можно вывести через print_r(WC()->payment_gateways->payment_gateways())).
  • Кэширование мешает изменениям: Очистите кэш сайта и браузера, отключите плагины кэширования на время теста.
  • Время сервера не совпадает с настройками WordPress: Используйте current_time('H'), а не date('H'), чтобы получить время с учётом часового пояса WordPress.
  • Ошибка PHP при отключении метода: Убедитесь, что проверяете существование ключа перед unset().

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

  • Не добавляйте сложную логику API проверки внутри фильтра — вместо этого обновляйте флаги через cron или внешние скрипты.
  • Минимизируйте количество запросов к базе данных внутри фильтров, кэшируйте результаты.
  • Проверяйте, что отключение способов оплаты не ломает логику расчёта заказа и не приводит к ошибкам оформления.

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

МетодСложность реализацииГибкостьПроизводительность
Код в фильтре woocommerce_available_payment_gatewaysНизкаяВысокая — можно задать любые условияВысокая, если логика простая
Плагины управления способами оплатыСредняяСредняя — ограничены функционаломСредняя — зависит от плагина
Отключение в админке вручнуюОчень низкаяНизкая — нет автоматизацииВысокая

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как в WooCommerce автоматически исключить из каталога товары без остатка на складе
21.04.2026
Как удалить дублирующийся контент в WordPress: практические методы и примеры
22.11.2025
WooCommerce: автоматическое отключение неактивных способов оплаты
17.06.2026
WooCommerce: как автоматически исключить из каталога товары без остатка на складе
28.04.2026
Как автоматически транслитерировать метки (теги) в WordPress для SEO
19.03.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее