Диагностика проблемы: почему заброшенные корзины создают нагрузку
В WooCommerce корзины создаются и сохраняются в базе данных как сессии или пользовательские метаданные. Если пользователи добавляют товары, но не завершают покупку, эти «заброшенные» корзины накапливаются. Это ведет к увеличению размера базы данных, замедлению сайта и неправильной статистике по продажам.
Чтобы проверить наличие проблемы, выполните SQL-запрос к базе данных:
SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP();Если количество записей значительно, пора автоматизировать очистку.
Пошаговое решение: как настроить автоматическое удаление заброшенных корзин через WP-Cron
1. Создайте функцию очистки сессий WooCommerce
Добавьте следующий код в functions.php вашей темы или в отдельный плагин:
function wpskill_clear_expired_woocommerce_sessions() {
global $wpdb;
$table = $wpdb->prefix . 'woocommerce_sessions';
$time = time();
// Удаляем сессии с истекшим сроком
$deleted = $wpdb->query( $wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %d",
$time
) );
if ( false === $deleted ) {
error_log('Ошибка удаления заброшенных корзин WooCommerce');
}
return $deleted;
}2. Зарегистрируйте WP-Cron задачу для регулярного запуска
Добавьте код для регистрации задачи, которая будет запускаться раз в 6 часов:
function wpskill_schedule_clear_woocommerce_sessions() {
if ( ! wp_next_scheduled( 'wpskill_clear_woocommerce_sessions_hook' ) ) {
wp_schedule_event( time(), 'twicedaily', 'wpskill_clear_woocommerce_sessions_hook' );
}
}
add_action( 'wp', 'wpskill_schedule_clear_woocommerce_sessions' );
add_action( 'wpskill_clear_woocommerce_sessions_hook', 'wpskill_clear_expired_woocommerce_sessions' );3. Добавьте возможность ручного запуска для тестирования
Для проверки добавьте админский пункт или вызов функции вручную:
if ( is_admin() && isset($_GET['clear_wc_sessions']) ) {
$deleted = wpskill_clear_expired_woocommerce_sessions();
echo '<div class="notice notice-success is-dismissible">Удалено заброшенных корзин: ' . intval($deleted) . '</div>';
}Проверка результата после внедрения
- Через 6 часов (или после ручного запуска) выполните SQL-запрос из раздела диагностики — количество заброшенных корзин должно уменьшиться.
- В логе ошибок WordPress проверьте отсутствие записей «Ошибка удаления заброшенных корзин WooCommerce».
- Мониторьте производительность сайта и размер таблицы
wp_woocommerce_sessionsчерез phpMyAdmin или аналог.
Частые ошибки и как их исправить
- WP-Cron не запускается автоматически: проверьте, что на сайте есть трафик, вызывающий wp-cron.php. Для гарантированного запуска настройте системный cron на сервере.
- Неверное имя таблицы: префикс таблицы может отличаться. Используйте
$wpdb->prefixдля динамического определения. - Удаление не происходит: проверьте права пользователя базы данных и лог ошибок.
- Удаление слишком частое или редкое: настройте интервал
twicedailyили создайте кастомный интервал черезadd_filter('cron_schedules').
Практические советы по безопасности и производительности
- Не удаляйте сессии слишком часто — это может повлиять на пользовательский опыт, если клиент вернется и захочет завершить покупку.
- Логируйте количество удаленных записей для мониторинга и отладки.
- Для сайтов с большим трафиком лучше настроить системный cron и отключить wp-cron через
define('DISABLE_WP_CRON', true);в wp-config.php. - Если используете плагин Clearfy Pro от WPShop, он может помочь с оптимизацией базы и очисткой мусора на сайте, что дополнит это решение.
Сравнение способов очистки заброшенных корзин WooCommerce
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| WP-Cron функция (код) | Гибкость, контроль над логикой, бесплатность | Зависит от трафика, требует навыков программирования | Лучше для опытных разработчиков и кастомных проектов |
| Плагин очистки сессий | Простота, готовое решение | Может влиять на производительность, ограниченная кастомизация | Для быстрого внедрения и новичков |
| Системный cron + WP-CLI | Надежность, независимость от трафика | Требует доступа к серверу и CLI | Рекомендуется для крупных сайтов с высокой нагрузкой |