Диагностика проблемы с платёжными системами в 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 | Автоматизация, экономия времени | Нужна отладка, нагрузка на БД |
| Плагины мониторинга платежей | Готовые интерфейсы, поддержка | Платно, лишние зависимости |