Почему важно отключать неиспользуемые платёжные системы в WooCommerce
Поддержание актуального и минимального набора платёжных методов в WooCommerce снижает риск ошибок при оформлении заказа, уменьшает нагрузку на сайт и сокращает время загрузки страниц. Кроме того, это повышает безопасность, снижая поверхность атаки за счёт отключения неиспользуемых интеграций.
Диагностика: как определить, какие платёжные системы не используются
Для начала нужно проанализировать статистику заказов за последний период (например, за 3-6 месяцев) и выяснить, какие платёжные методы не применялись или применялись крайне редко.
- В WooCommerce перейдите в WooCommerce > Отчёты > Заказы.
- Отфильтруйте заказы по платёжным методам.
- Экспортируйте данные для более глубокого анализа (например, в CSV).
Если у вас есть доступ к базе данных, можно выполнить SQL-запрос для подсчёта заказов по методам оплаты:
SELECT payment_method, COUNT(ID) as count_orders
FROM wp_posts
JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
WHERE post_type = 'shop_order'
AND meta_key = '_payment_method'
GROUP BY payment_method
ORDER BY count_orders ASC;
Методы с нулевым или минимальным количеством заказов — кандидаты на отключение.
Пошаговое решение: как автоматически отключать неиспользуемые платёжные системы
1. Создание функционала для отслеживания активности платёжных методов
Реализуем cron-задачу, которая раз в неделю проверяет количество заказов за последний месяц по каждому платёжному методу и отключает те, что не использовались.
function disable_unused_payment_gateways() {
if ( ! class_exists( 'WC_Payment_Gateways' ) ) {
return;
}
$gateways = WC()->payment_gateways->payment_gateways();
$unused_gateways = [];
global $wpdb;
$one_month_ago = date('Y-m-d H:i:s', strtotime('-30 days'));
foreach ( $gateways as $id => $gateway ) {
$count = $wpdb->get_var( $wpdb->prepare(
"SELECT COUNT(p.ID) FROM {$wpdb->posts} p
JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed', 'wc-processing')
AND pm.meta_key = '_payment_method'
AND pm.meta_value = %s
AND p.post_date >= %s",
$id,
$one_month_ago
) );
if ( intval($count) === 0 ) {
$unused_gateways[] = $id;
}
}
// Отключаем неиспользуемые шлюзы
if ( ! empty( $unused_gateways ) ) {
$options = get_option('woocommerce_payment_gateways_settings', []);
foreach ( $unused_gateways as $gateway_id ) {
if ( isset( $options[ $gateway_id ] ) ) {
$options[ $gateway_id ]['enabled'] = 'no';
}
}
update_option( 'woocommerce_payment_gateways_settings', $options );
}
}
// Добавляем cron задачу
add_action( 'wp', function() {
if ( ! wp_next_scheduled( 'disable_unused_payment_gateways_cron' ) ) {
wp_schedule_event( time(), 'weekly', 'disable_unused_payment_gateways_cron' );
}
});
add_action( 'disable_unused_payment_gateways_cron', 'disable_unused_payment_gateways' );
2. Ручное отключение платёжных систем через фильтр (для немедленных случаев)
Можно динамически отключать платёжные методы при загрузке страницы оформления заказа, например, если в админке стоит флаг «отключить». Добавим фильтр:
add_filter( 'woocommerce_available_payment_gateways', 'filter_unused_payment_gateways' );
function filter_unused_payment_gateways( $available_gateways ) {
$disabled_gateways = get_option( 'disabled_payment_gateways', [] );
foreach ( $disabled_gateways as $gateway_id ) {
if ( isset( $available_gateways[ $gateway_id ] ) ) {
unset( $available_gateways[ $gateway_id ] );
}
}
return $available_gateways;
}
Проверка результата после внедрения
- Перейдите на страницу оформления заказа и убедитесь, что неиспользуемые платёжные методы отсутствуют в списке.
- В админке WooCommerce проверьте, что статус платёжных методов изменён на «отключено».
- Просмотрите логи cron-задачи (например, через плагин WP Crontrol) для подтверждения срабатывания функции.
Частые ошибки и как их исправить
- Методы не отключаются после cron: Проверьте, что cron запускается (используйте WP Crontrol для диагностики). Проверьте права на запись опций.
- Неправильный ID платёжного метода: Используйте точные идентификаторы, как show в WooCommerce — можно вывести через
print_r(array_keys(WC()->payment_gateways->payment_gateways()));. - Отключение нужных методов: Проверьте логику определения использования метода, чтобы не отключать методы с редкими заказами без причины.
- Проблемы с кешем и кэш-плагинами: Очистите кеш после изменений, особенно если платёжные методы не обновляются на фронтенде.
Практические советы по безопасности и производительности
- Не отключайте метод оплаты полностью, если он используется в отложенных или подписочных платежах.
- Запускайте cron-задачи в не часы пик, чтобы избежать нагрузки.
- Регулярно делайте бэкапы перед массовыми изменениями настроек.
- Используйте WP-CLI для проверки статистики заказов для более масштабных сайтов.
- Для сайтов с большим количеством платёжных методов и заказов — оптимизируйте SQL-запросы, добавляйте индексы по мета-ключам.
Сравнение способов отключения платёжных систем
| Метод | Плюсы | Минусы | Применение |
|---|---|---|---|
| Ручное отключение через админку | Просто, не требует кода | Требует постоянного контроля | Малые магазины, редко меняются методы |
| Автоматическое через cron и код | Автоматизация, снижает рутину | Требует тестирования, возможны ошибки при неверной логике | Средние и крупные магазины с большим ассортиментом методов оплаты |
| Фильтр отключения в runtime | Гибко, можно быстро включать/выключать | Не сохраняет состояние в админке | Временное решение, тестирование |