Диагностика проблемы: зачем удалять старые отзывы в WooCommerce
Отзывы в WooCommerce хранятся в таблице wp_comments с типом comment_type = 'review'. Со временем их количество может вырасти до сотен тысяч, что замедляет запросы к базе данных и влияет на производительность сайта. Особенно это актуально для магазинов с большим количеством товаров и активной системой отзывов.
Удаление старых или неактуальных отзывов помогает:
- Оптимизировать размер базы данных
- Ускорить загрузку страниц с отзывами
- Избавиться от спама и некачественных комментариев
Пошаговое решение: как удалить отзывы старше определённой даты через код
Для удаления отзывов без плагинов можно использовать WP-CLI или написать кастомный PHP-скрипт, который удалит отзывы старше нужной даты.
Вариант 1: Использование WP-CLI
WP-CLI позволяет быстро и безопасно удалять отзывы из командной строки. Для удаления всех отзывов старше 1 января 2022 года выполните:
wp comment delete $(wp comment list --comment_type=review --date_query_column=comment_date --before=2022-01-01 --format=ids) --forceЭтот однострочник сначала получает ID отзывов, а затем удаляет их принудительно.
Вариант 2: PHP-скрипт для удаления старых отзывов
Если доступа к WP-CLI нет, можно использовать следующий код в теме или подключаемом плагине (например, через functions.php), но запускать один раз, а потом удалять:
function delete_old_woocommerce_reviews() {
global $wpdb;
$date_threshold = '2022-01-01 00:00:00';
// Получаем ID старых отзывов
$comment_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT comment_ID FROM $wpdb->comments WHERE comment_type = %s AND comment_date < %s",
'review',
$date_threshold
) );
if ( empty($comment_ids) ) {
return;
}
foreach ( $comment_ids as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
}
// Вызываем функцию один раз
add_action('init', function() {
if ( current_user_can('manage_options') && isset($_GET['delete_old_reviews']) ) {
delete_old_woocommerce_reviews();
wp_die('Удаление старых отзывов выполнено');
}
});Для запуска перейдите в браузере по адресу https://ваш-сайт.ru/?delete_old_reviews=1 под админом.
Проверка результата после удаления старых отзывов
- В админке WordPress в разделе «Отзывы» проверьте количество комментариев — оно должно уменьшиться.
- В базе данных через phpMyAdmin выполните запрос:
SELECT COUNT(*) FROM wp_comments WHERE comment_type = 'review' AND comment_date < '2022-01-01';Он должен возвращать 0.
- Проверьте скорость загрузки страниц товаров с отзывами — она должна улучшиться, если было много старых отзывов.
Частые ошибки и как их исправить
- Отзывы не удаляются: проверьте, есть ли права администратора и корректно ли подключена база данных.
- Удаляются не все отзывы: убедитесь, что дата порога указана правильно и используется именно фильтр
comment_type='review'. - Сайт выдает ошибки после запуска скрипта: возможно, скрипт запущен многократно или некорректно. Уберите вызов после первого использования.
Практические советы по безопасности и производительности
- Всегда делайте резервную копию базы данных перед массовым удалением данных.
- Запускайте удаление отзывов в ночное время, чтобы не нагружать сервер при пиковых посещениях.
- Для больших сайтов делайте удаление по частям, например, по 1000 отзывов за раз, чтобы избежать тайм-аутов PHP.
- После удаления запустите оптимизацию таблиц
wp_commentsчерез phpMyAdmin или WP-CLI (wp db optimize).
Сравнение способов удаления старых отзывов
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| WP-CLI | Быстро, надежно, нет нагрузки на PHP | Нужен SSH-доступ и базовые навыки консоли | Идеально для опытных администраторов |
| PHP-скрипт | Работает на любом хостинге, нет необходимости в SSH | Нагрузка на сервер, риск тайм-аутов, требует ручного запуска | Подходит для небольших сайтов |