Очистка корзины и истории заказов WooCommerce по устройствам

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

В WooCommerce корзина пользователя хранится в сессии и cookie, а история заказов - в базе данных, привязана к аккаунту. Иногда нужно очистить корзину или историю заказов не глобально, а для определённых устройств или браузеров, например, при тестировании, устранении багов или при жалобах пользователей на некорректное отображение товара в корзине.

Типичные симптомы, указывающие на необходимость очистки корзины или истории заказов по устройствам:

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

Как очистить корзину WooCommerce по устройствам

Важное о сессиях и cookie WooCommerce

Корзина хранится в сессии пользователя, доступ к которой осуществляется через cookie woocommerce_cart_hash и woocommerce_items_in_cart. Очистка корзины для конкретного устройства означает удаление этих cookie и сессии.

Пошаговое решение через PHP и JavaScript

Если вы хотите программно очистить корзину текущего пользователя (например, для кнопки «Очистить корзину»), используйте следующий код в functions.php или в вашем плагине:

add_action('wp_ajax_clear_cart', 'custom_clear_cart_function');
add_action('wp_ajax_nopriv_clear_cart', 'custom_clear_cart_function');

function custom_clear_cart_function() {
    WC()->cart->empty_cart(true);
    wp_send_json_success('Корзина очищена');
}

Для вызова этого AJAX-запроса с фронтенда можете использовать JS:

jQuery.post(
    wc_cart_params.ajax_url,
    { action: 'clear_cart' },
    function(response) {
        if(response.success) {
            location.reload(); // Перезагрузка страницы для обновления UI
        }
    }
);

Если же вы хотите полностью удалить cookie корзины на клиенте, используйте JavaScript:

document.cookie = 'woocommerce_cart_hash=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
document.cookie = 'woocommerce_items_in_cart=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';

Как очистить историю заказов WooCommerce для конкретного пользователя

Удаление истории заказов из базы данных

История заказов хранится в таблице wp_posts с типом записи shop_order, а мета-данные - в wp_postmeta. Для удаления заказов конкретного пользователя (ID пользователя) можно использовать SQL или WP_Query.

Пример удаления заказов пользователя по ID:

$user_id = 123; // ID пользователя

$args = [
    'post_type' => 'shop_order',
    'numberposts' => -1,
    'author' => $user_id,
    'post_status' => 'any',
];

$orders = get_posts($args);

foreach ($orders as $order) {
    wp_delete_post($order->ID, true);
}

Обратите внимание, что заказ может быть не всегда автором пользователя, если гость оформляет заказ. Тогда фильтрация по мета-данным с email клиента:

$customer_email = 'user@example.com';

$args = [
    'post_type' => 'shop_order',
    'numberposts' => -1,
    'post_status' => 'any',
    'meta_query' => [
        [
            'key' => '_billing_email',
            'value' => $customer_email,
'compare' => '=',
        ],
    ],
];

$orders = get_posts($args);
foreach ($orders as $order) {
    wp_delete_post($order->ID, true);
}

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

  • Для очистки корзины: откройте сайт в браузере, добавьте товар в корзину, вызовите AJAX-запрос очистки и проверьте, что корзина пустая, а cookie woocommerce_cart_hash удалены или обновлены.
  • Для очистки истории заказов: зайдите в админку WooCommerce – Заказы, убедитесь, что заказы пользователя отсутствуют, а в базе данных (через phpMyAdmin) записи удалены.

Частые ошибки и как их исправить

  • Корзина не очищается после AJAX-запроса: Проверьте, что сессия WooCommerce и объект WC()->cart инициализированы. Добавьте wc_load_cart() перед очисткой.
  • Удаление заказов не работает для гостевых покупок: Не используйте фильтр author, а ищите через мета-ключ _billing_email.
  • Заказы не удаляются полностью: Убедитесь, что используете wp_delete_post($id, true) с параметром true для полного удаления.

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

  • Удаление заказов – необратимая операция, делайте резервные копии базы перед выполнением.
  • Ограничьте доступ к очистке корзины и заказов только администраторам или доверенным ролям, проверяя current_user_can().
  • Для массового удаления заказов используйте WP CLI для производительности и безопасности:
wp post delete $(wp post list --post_type=shop_order --meta_key=_billing_email --meta_value=user@example.com --format=ids) --force

Сравнение способов очистки корзины и заказов

ЗадачаСпособПлюсыМинусы
Очистка корзиныAJAX + PHP (WC()->cart->empty_cart())Точная очистка для сессииТребует сессии и загрузки WC
Очистка корзиныУдаление cookie JSПростота, работает на клиентеНе сбрасывает серверную сессию
Удаление заказовPHP + WP_Query + wp_delete_post()Гибкость, работа с условиямиМожет быть медленнее при большом объеме
Удаление заказовWP CLI командаБыстро и безопасно при большом объемеТребует SSH-доступа

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

⭐⭐⭐⭐⭐
Как использовать хуки в WordPress для автоматизации и расширения функционала
04.12.2025
WooCommerce: как автоматически удалять неактивные заказы и очищать базу
05.05.2026
Как удалить неиспользуемые метаключи в WooCommerce: практическое руководство
28.04.2026
Как отключить Emoji в WordPress для ускорения сайта
15.02.2026
Как удалить неиспользуемые виджеты WordPress: практическое руководство
28.12.2025
×
WordPress
прокачай свой сайт!

-20% на премиум темы и плагины

Сделай апгрейд сайта ⋙