В процессе работы с WordPress иногда возникает задача очистить сайт от устаревших материалов, которые были изменены, но уже не актуальны и не нужны. Особенно это важно для новостных и информационных порталов, где поток контента большой, а старые версии постов не несут ценности. В этой статье мы разберём, как автоматически удалять посты, которые были отредактированы и не обновлялись более определённого времени.
Почему важно удалять старые редактированные посты
Накопление устаревших постов может негативно влиять на производительность сайта, а также на качество выдачи в поисковых системах. Если посты давно не обновлялись, они могут содержать неактуальную информацию или дублировать новые материалы. Удаление таких записей помогает:
- Снизить нагрузку на базу данных;
- Улучшить навигацию по сайту;
- Поддерживать актуальность контента;
- Сделать SEO-оптимизацию более эффективной.
Как определить посты для удаления по дате последнего редактирования
WordPress хранит дату последнего изменения поста в поле post_modified таблицы wp_posts. Мы можем использовать этот параметр, чтобы отобрать записи, которые не изменялись более, например, 1 года (365 дней).
Для этого создадим функцию wpdirect_delete_old_edited_posts(), которая будет искать такие посты и удалять их программно.
Пример функции удаления старых постов
function wpdirect_delete_old_edited_posts() {
$days = 365; // количество дней для определения устаревших записей
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_modified',
'before' => $date_threshold,
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // принудительное удаление без помещения в корзину
}
}
}
Данная функция ищет все опубликованные записи, которые не изменялись более года, и удаляет их окончательно. Можно изменить переменную $days для других периодов.
Как запускать удаление автоматически по расписанию
Для автоматизации можно использовать WP-Cron — встроенный в WordPress планировщик задач. Создадим событие, которое будет вызывать нашу функцию, например, раз в неделю.
Добавление WP-Cron задачи
function wpdirect_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpdirect_weekly_delete_old_posts')) {
wp_schedule_event(time(), 'weekly', 'wpdirect_weekly_delete_old_posts');
}
}
add_action('wp', 'wpdirect_schedule_old_posts_deletion');
add_action('wpdirect_weekly_delete_old_posts', 'wpdirect_delete_old_edited_posts');
Этот код регистрирует еженедельное событие, которое вызывает нашу функцию удаления. Таким образом, сайт будет автоматически очищаться от устаревших постов без вашего участия.
Как контролировать процесс и безопасно выполнять удаление
Удаление записей — критичная операция, поэтому рекомендуется:
- Сделать резервную копию базы данных перед активацией автоматического удаления;
- Добавить логирование удалённых постов для контроля;
- Реализовать возможность отключения автоматического удаления через админку или константу.
Пример логирования удалённых постов
function wpdirect_delete_old_edited_posts() {
$days = 365;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_modified',
'before' => $date_threshold,
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
$title = get_the_title($post_id);
if (wp_delete_post($post_id, true)) {
error_log("[WPDirect] Удалён пост ID: $post_id, Заголовок: $title");
}
}
}
}
Логи можно просматривать в файле wp-content/debug.log при включённом WP_DEBUG_LOG.
Использование плагинов для автоматизации удаления устаревшего контента
Если хочется готовое решение с настройками через интерфейс, рассмотрите плагины:
- Clearfy Pro — включает расширенные инструменты оптимизации, в том числе авточистку контента;
- WPCommunity — если вы используете соцсеть на WordPress, там есть функции управления устаревшим контентом.
Но если нужно точечное решение под свои задачи — код из статьи позволит гибко настроить процесс.
Итоговые рекомендации по автоматическому удалению старых редактированных постов
Автоматическое удаление устаревших постов в WordPress — простой способ поддерживать сайт в актуальном состоянии и оптимизировать работу сервера. Важно тщательно тестировать код и обязательно делать бэкапы. Используйте функцию wpdirect_delete_old_edited_posts() в сочетании с WP-Cron, чтобы настроить регулярные чистки.
А при необходимости можете расширить функционал, добавив уведомления администратору или исключения для важных записей.