В WordPress часто возникает задача автоматически удалять устаревшие записи или комментарии по прошествии определенного времени — например, через 7 дней после публикации или создания. Это особенно актуально для новостных сайтов, форумов или тестовых ресурсов, где неактуальный контент нужно регулярно чистить для поддержания актуальности и оптимизации базы данных.
Зачем нужна автоочистка записей и комментариев в WordPress
Автоматическое удаление устаревших элементов помогает не только держать базу данных в порядке, но и улучшает производительность сайта, снижает нагрузку на сервер и уменьшает объем резервных копий. Особенно полезно это для сайтов с большим потоком пользовательского контента, где вручную контролировать устаревшие элементы сложно.
Кроме того, автоматическое удаление помогает соблюдать политику хранения данных и правила конфиденциальности, если комментарии или записи должны храниться ограниченное время.
Как реализовать автоудаление записей по времени с помощью WPDir_cron_delete_posts()
Для реализации автоудаления в WordPress традиционно используют WP-Cron — встроенный механизм выполнения отложенных задач. Ниже пример функции, которая удаляет публикации старше 7 дней, и настройка расписания для её регулярного вызова.
function wpdir_cron_delete_posts() {
$args = [
'date_query' => [
[
'column' => 'post_date',
'before' => '7 days ago',
],
],
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
];
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true — удаление без возможности восстановления
}
}
add_action('wpdir_delete_old_posts_event', 'wpdir_cron_delete_posts');
function wpdir_schedule_cron_delete() {
if (!wp_next_scheduled('wpdir_delete_old_posts_event')) {
wp_schedule_event(time(), 'daily', 'wpdir_delete_old_posts_event');
}
}
add_action('wp', 'wpdir_schedule_cron_delete');Здесь мы создаём событие wpdir_delete_old_posts_event, которое запускается ежедневно и вызывает функцию удаления всех опубликованных записей старше 7 дней.
Объяснение кода
В запросе get_posts через параметр date_query выбираются записи, дата публикации которых старше 7 дней назад. Далее в цикле вызывается wp_delete_post с флагом true для полного удаления.
Важно: если вы используете сторонние типы записей, например, из плагинов, можно добавить их в параметр 'post_type' массива $args, указав массив с нужными типами.
Автоматическое удаление комментариев старше 7 дней с помощью WPDir_cron_delete_comments()
Аналогично можно удалить устаревшие комментарии. Ниже пример функции и настройка cron для удаления комментариев, оставленных более 7 дней назад.
function wpdir_cron_delete_comments() {
global $wpdb;
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->comments WHERE comment_date < %s",
date('Y-m-d H:i:s', strtotime('-7 days'))
)
);
}
add_action('wpdir_delete_old_comments_event', 'wpdir_cron_delete_comments');
function wpdir_schedule_cron_delete_comments() {
if (!wp_next_scheduled('wpdir_delete_old_comments_event')) {
wp_schedule_event(time(), 'daily', 'wpdir_delete_old_comments_event');
}
}
add_action('wp', 'wpdir_schedule_cron_delete_comments');Здесь мы напрямую удаляем записи из таблицы комментариев, дата которых старше 7 дней. Такой способ быстрее, чем удалять комментарии по одному через API WordPress, но требует аккуратности и резервного копирования базы.
Предостережения и рекомендации
- Перед внедрением автоматического удаления сделайте резервную копию базы данных.
- Тестируйте функции на тестовом сайте, чтобы избежать случайной потери данных.
- Если база большая, подумайте о порционном удалении, чтобы избежать таймаутов.
- Проверьте совместимость с плагинами, которые могут хранить дополнительные данные по постам или комментариям.
Готовые плагины для автоудаления устаревшего контента
Если хотите упростить задачу, можно использовать готовые решения:
- Auto Delete Posts — плагин для автоматического удаления записей по возрасту и другим параметрам.
- Delete Expired Transients — помогает чистить устаревшие временные данные.
- Clearfy Pro — расширенный инструмент оптимизации, в котором есть функции очистки базы, включая удаление устаревших данных.
Плагины позволяют гибко настраивать условия и периодичность удаления, не погружаясь в код.
Как отключить автоудаление временно или изменить период удаления
Чтобы временно отключить автоматическое удаление, можно снять регистрацию cron-событий, например:
function wpdir_unschedule_cron_delete() {
$timestamp = wp_next_scheduled('wpdir_delete_old_posts_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpdir_delete_old_posts_event');
}
}
add_action('init', 'wpdir_unschedule_cron_delete');Для изменения периода удаления достаточно скорректировать дату в параметре 'before' => '7 days ago' на нужное значение, например, '14 days ago' или '1 month ago'.
Выводы и рекомендации по автоудалению
Автоматическое удаление записей и комментариев — мощный инструмент управления контентом и базой данных. Он помогает поддерживать порядок, ускоряет работу сайта и уменьшает нагрузку на сервер.
Используйте встроенный WP-Cron для настройки регулярных задач, либо подключайте готовые плагины для более гибких настроек. Обязательно тестируйте и делайте резервные копии перед внедрением таких решений.
Если хотите комплексно оптимизировать сайт, обратите внимание на Clearfy Pro, который автоматически убирает неиспользуемые данные и помогает поддерживать базу в отличном состоянии.