Ведение сайта на WordPress часто сопровождается накоплением большого количества устаревших или нерелевантных записей, которые могут замедлять работу и усложнять администрирование. В этой статье мы подробно рассмотрим, как можно автоматизировать удаление старого контента в WordPress по дате публикации, чтобы поддерживать сайт в актуальном состоянии без лишних затрат времени.
Почему важно удалять старый контент
Старый контент, который уже не актуален или не приносит пользы посетителям, может негативно сказаться на производительности сайта и его SEO. Поисковые системы ценят свежий и релевантный контент, а устаревшие записи могут снижать общий рейтинг сайта.
Кроме того, удаление ненужных записей уменьшает нагрузку на базу данных, что улучшает скорость загрузки страниц и снижает вероятность возникновения ошибок при работе с сервером.
Автоматизация этого процесса позволит регулярно очищать сайт без необходимости ручного контроля, что особенно важно для крупных проектов с большим объемом данных.
Настройка автоматического удаления записи по дате с помощью WP-Cron
WordPress имеет встроенную систему планировщика задач — WP-Cron, с помощью которой можно запускать функции по расписанию. Мы создадим функцию, которая будет автоматически удалять записи старше определённого количества дней.
Создание функции для удаления старого контента
Добавьте в файл функции вашей темы (functions.php) или в кастомный плагин следующий код:
function wpreset_delete_old_posts() {
$days = 180; // количество дней, старше которого записи будут удаляться
$date_query = array(
'column' => 'post_date',
'before' => date('Y-m-d', strtotime("-{$days} days")),
);
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array($date_query),
'fields' => 'ids',
'posts_per_page' => -1
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true — удаление без возможности восстановления
}
}
}
В этом коде мы ищем все публикации старше 180 дней и удаляем их без возможности восстановления.
Регистрация задачи WP-Cron
Для автоматического запуска функции добавим расписание и привяжем задачу к событию WordPress:
function wpreset_register_cron_event() {
if (!wp_next_scheduled('wpreset_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpreset_daily_delete_old_posts');
}
}
add_action('wp', 'wpreset_register_cron_event');
add_action('wpreset_daily_delete_old_posts', 'wpreset_delete_old_posts');
Этот код регистрирует ежедневное событие, которое будет запускать нашу функцию удаления старого контента.
Удаление старого контента разных типов записей
Если на вашем сайте используются кастомные типы записей (например, портфолио, отзывы, товары и т.п.), вы можете легко расширить функцию для удаления старого контента и для них:
function wpreset_delete_old_custom_posts() {
$days = 90; // количество дней для кастомных типов
$post_types = array('portfolio', 'testimonial'); // укажите нужные типы записей
$date_query = array(
'column' => 'post_date',
'before' => date('Y-m-d', strtotime("-{$days} days")),
);
foreach ($post_types as $post_type) {
$args = array(
'post_type' => $post_type,
'post_status' => 'publish',
'date_query' => array($date_query),
'fields' => 'ids',
'posts_per_page' => -1
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
}
add_action('wpreset_daily_delete_old_posts', 'wpreset_delete_old_custom_posts');
Теперь при ежедневном запуске WP-Cron будут удаляться и записи указанных кастомных типов.
Управление удалением через плагин WPReset и другие инструменты
Если вы предпочитаете использовать готовые решения, обратите внимание на плагин WPReset. Он позволяет быстро восстанавливать сайт после экспериментов и может быть полезен для управления состоянием контента.
Для регулярного и безопасного удаления старого контента рекомендуется настраивать автоматические резервные копии с помощью плагинов, таких как Clearfy Pro или Expert Review, чтобы при необходимости быстро вернуть удалённые данные.
Советы по безопасному удалению и тестированию
Перед включением автоматического удаления обязательно протестируйте функцию на тестовом сайте или с ограниченным набором данных. Это поможет избежать случайной потери нужного контента.
Вместо безвозвратного удаления можно сначала настроить перенос записей в черновики или в отдельную категорию для последующего ручного анализа.
Также учитывайте, что WP-Cron запускается при посещении сайта, поэтому на низкоскоростных ресурсах задачи могут запускаться с задержкой. Для более точного контроля можно настроить системный cron на сервере.
Выводы и рекомендации
Автоматизация удаления старого контента помогает поддерживать сайт в актуальном состоянии, улучшать производительность и облегчать администрирование. Использование WP-Cron и кастомных функций позволяет гибко настраивать логику удаления в соответствии с требованиями проекта.
Для регулярного удаления записей по дате достаточно добавить предложенный код в functions.php или создать небольшой плагин.
Не забывайте про резервное копирование и тестирование, чтобы избежать потери важных данных.