WooCommerce: как удалить все просмотры товаров по ID пользователя через код

Диагностика: зачем удалять просмотры товаров в WooCommerce

В WooCommerce для анализа поведения пользователей часто хранятся данные о просмотренных товарах. Иногда возникает необходимость очистить эти данные для конкретного пользователя — например, при тестировании, очистке истории или по требованиям GDPR. В стандартных настройках WooCommerce такой функции нет. Нужно реализовать это вручную через код.

Где хранятся просмотры товаров в WooCommerce

Данные о просмотрах товаров обычно хранятся в пользовательских метаданных или в куки, если используется плагин, например, WooCommerce Recently Viewed Products. В стандартном WooCommerce история просмотров хранится в куках браузера, но некоторые сайты расширяют функционал и сохраняют данные в базе.

Если ваш сайт хранит просмотры в пользовательских метаданных, то ключ может отличаться, например, _woocommerce_recently_viewed или кастомный ключ вашего плагина.

Пошаговое решение: удаление просмотров товаров по ID пользователя из метаданных

1. Подключение к WordPress и определение ID пользователя

Для начала нужно знать ID пользователя, чьи просмотры надо удалить. Обычно ID передается в функцию или берется из контекста.

function wc_delete_user_viewed_products( $user_id ) {
    if ( ! $user_id ) {
        return false; // Нет ID пользователя
    }

    // Дальше идет удаление метаданных
}

2. Удаление метаданных с просмотрами

Если данные о просмотрах хранятся в метаданных пользователя, удаляем нужное поле:

function wc_delete_user_viewed_products( $user_id ) {
    if ( ! $user_id ) {
        return false;
    }

    $meta_key = '_woocommerce_recently_viewed'; // пример ключа
    delete_user_meta( $user_id, $meta_key );

    return true;
}

3. Проверка и вызов функции

Вызвать функцию можно из любой части сайта, например, из шаблона или через AJAX. Пример:

$user_id = 123; // ID нужного пользователя
$result = wc_delete_user_viewed_products( $user_id );
if ( $result ) {
    echo 'Просмотры товаров пользователя удалены.';
} else {
    echo 'Ошибка: не указан ID пользователя.';
}

Как проверить, что просмотры удалены

  • Зайдите в базу данных, таблицу wp_usermeta, найдите записи с user_id = X и ключом _woocommerce_recently_viewed. Их не должно быть.
  • Если данные хранятся в куках, очистите куки браузера.
  • Зайдите под этим пользователем на сайт и проверьте, что история просмотров пуста (например, блок «Просмотренные товары» не отображается).

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

  • Неверный ID пользователя: функция не сработает без корректного ID. Проверьте, что передаете int и пользователь существует.
  • Неправильный ключ метаданных: если не уверены, какой ключ используется, проверьте в базе или в коде плагина/темы.
  • Кэширование: если используется кэш (например, object-cache), он может мешать моментальному удалению. Очистите кэш.
  • Данные в куках: если история просмотров хранится в куках, серверный код не удалит их. Придется очищать куки клиентом через JS.

Дополнительно: удаление просмотров из куков через JavaScript

Если история просмотров хранится в куках, используйте JS-код для их очистки:

function wc_clear_viewed_products_cookie() {
    echo "<script>
    document.cookie = 'woocommerce_recently_viewed=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC;';
    </script>";
}
add_action('wp_footer', 'wc_clear_viewed_products_cookie');

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

  • Проверяйте права пользователя при удалении данных, чтобы избежать несанкционированного доступа.
  • Удаляйте метаданные только по необходимости, чтобы не создавать лишних операций с базой.
  • Если нужно массово очищать просмотры для множества пользователей, делайте это пакетно и с кешированием.

Сравнение подходов к удалению просмотров товаров

МетодПлюсыМинусы
Удаление метаданных PHPПрямой доступ к данным, подходит для серверных операцийТребует знания ключа, не удаляет куки
Удаление куков JSУдаляет клиентские данные, простой кодНе влияет на данные в базе, требует загрузки страницы пользователем
Плагины управления историей просмотровГотовый функционал, настройки через UIЗависимость от плагина, менее гибко
⭐⭐⭐⭐⭐