В WordPress часто используют плагины и пользовательские решения для отслеживания просмотров постов. Однако, с течением времени количество данных о просмотрах может значительно вырасти и замедлить работу сайта. В этой статье мы подробно рассмотрим, как настроить автоматическое удаление старых данных просмотров, чтобы поддерживать базу данных в оптимальном состоянии.
Почему важно удалять старые просмотры в WordPress
Многие плагины и кастомные решения сохраняют статистику просмотров в метаданных записей или отдельной таблице. С течением времени эти данные накапливаются и могут занимать существенное место в базе данных, что приводит к замедлению запросов и увеличению времени загрузки сайта. Регулярное удаление устаревших просмотров помогает:
- Уменьшить размер базы данных.
- Повысить скорость отклика сайта.
- Избежать проблем с перегрузкой хранилища.
Где хранятся просмотры в WordPress и как их определить
Чаще всего просмотры сохраняются в postmeta с ключами типа post_views_count или похожими. Иногда плагины создают собственные таблицы, например wp_post_views. Чтобы понять, где хранятся данные просмотров, можно:
- Изучить документацию используемого плагина.
- Использовать SQL-запросы для поиска ключей в таблице
wp_postmetaс помощью:
SELECT DISTINCT meta_key FROM wp_postmeta WHERE meta_key LIKE '%view%';
Если плагин создает отдельную таблицу, это обычно видно в списке таблиц базы данных.
Как настроить автоматическое удаление просмотров по сроку хранения
Для примера рассмотрим случай, когда просмотры хранятся в метаполях с ключом post_views_count, и нам нужно удалять данные старше 30 дней. Для этого нужно хранить не только количество просмотров, но и дату последнего обновления — если плагин этого не делает, можно реализовать свое решение.
Пример: хранение даты и количества просмотров
Создадим два метаполя: wpbit_post_views_count и wpbit_post_views_date, где во втором будет дата последнего просмотра.
Функция для обновления просмотров в теме или плагине
function wpbit_update_post_views($post_id) {
$count = (int) get_post_meta($post_id, 'wpbit_post_views_count', true);
$count++;
update_post_meta($post_id, 'wpbit_post_views_count', $count);
update_post_meta($post_id, 'wpbit_post_views_date', current_time('mysql'));
}
Вызывайте эту функцию при загрузке поста, например, в single.php или через хук wp.
Функция для очистки старых просмотров
Создадим функцию, которая будет запускаться по Cron и удалять метаданные просмотров, если дата старше 30 дней:
function wpbit_cleanup_old_post_views() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
$meta_keys = ['wpbit_post_views_count', 'wpbit_post_views_date'];
// Получаем все посты с датой просмотров старше 30 дней
$post_ids = $wpdb->get_col($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} pm WHERE pm.meta_key = %s AND pm.meta_value < %s",
'wpbit_post_views_date', $date_threshold
));
if (!empty($post_ids)) {
foreach ($post_ids as $post_id) {
foreach ($meta_keys as $meta_key) {
delete_post_meta($post_id, $meta_key);
}
}
}
}
Добавление задачи Cron для автоматизации
Чтобы функция запускалась автоматически, добавим расписание и событие в файл functions.php или в плагин:
if (!wp_next_scheduled('wpbit_daily_cleanup_post_views')) {
wp_schedule_event(time(), 'daily', 'wpbit_daily_cleanup_post_views');
}
add_action('wpbit_daily_cleanup_post_views', 'wpbit_cleanup_old_post_views');
Теперь функция wpbit_cleanup_old_post_views будет запускаться ежедневно и удалять устаревшие просмотры.
Использование плагинов для очистки и оптимизации базы данных
Если вы используете популярные плагины для подсчета просмотров, например WP-PostViews или Count Per Day, то можно воспользоваться плагинами для оптимизации и очистки базы данных:
- Clearfy Pro — позволяет управлять метаданными и очищать их по расписанию.
- WP-Optimize — бесплатный плагин для очистки базы данных от устаревших данных.
Однако такие плагины не всегда умеют работать с пользовательскими ключами, поэтому лучше использовать кастомные решения.
Контроль и проверка эффективности очистки просмотров
После настройки автоматической очистки важно контролировать работу кода и корректность удаления данных:
- Проверьте, что просмотры действительно удаляются через 30 дней, взглянув в базу данных.
- Отслеживайте скорость работы сайта и размер таблиц
wp_postmeta. - Если используется кэширование, убедитесь, что кэш обновляется после очистки.
Логирование работы очистки
Для отладки можно добавить логирование в функцию очистки:
function wpbit_cleanup_old_post_views() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
$meta_keys = ['wpbit_post_views_count', 'wpbit_post_views_date'];
$post_ids = $wpdb->get_col($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} pm WHERE pm.meta_key = %s AND pm.meta_value < %s",
'wpbit_post_views_date', $date_threshold
));
if (!empty($post_ids)) {
foreach ($post_ids as $post_id) {
foreach ($meta_keys as $meta_key) {
delete_post_meta($post_id, $meta_key);
}
}
error_log('WPBit: Deleted views for posts: ' . implode(',', $post_ids));
} else {
error_log('WPBit: No old post views to delete');
}
}
Заключение по теме автоматического удаления просмотров
Автоматическое удаление старых просмотров позволяет поддерживать базу данных WordPress в порядке и улучшать производительность сайта. При правильной реализации можно избежать роста таблиц и ускорить загрузку страниц. Комбинация пользовательских функций с событиями Cron и плагинами для оптимизации — лучший путь к стабильной работе.
Если вы используете плагины из каталога WPShop, обратите внимание на возможности автоматизации очистки данных, которые они предлагают — это позволит ещё проще решать задачу.