Диагностика проблемы с платёжными системами 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 | Полный контроль, оптимизация под сайт | Требует знаний, возможность ошибок |
| Ручное управление | Максимальная безопасность, контроль | Трудозатратно, забываемость |