Ведение сайта на WordPress часто подразумевает регулярное добавление большого количества контента. Со временем часть старых постов может перестать быть актуальной, занимать место в базе данных и замедлять работу сайта. Поэтому возникает задача автоматического удаления устаревших записей, чтобы поддерживать чистоту и оптимальную производительность ресурса.
Почему важно удалять старые посты в WordPress
Старые записи могут:
- Загромождать базу данных, увеличивая её размер и замедляя запросы;
- Отрицательно влиять на SEO, если содержат устаревшую или нерелевантную информацию;
- Ухудшать пользовательский опыт, если посетители находят много неактуального контента;
- Создавать сложности при управлении сайтом и обновлении данных.
Автоматизация удаления позволяет избавиться от ручной работы и исключить человеческий фактор.
Основные способы автоматического удаления постов
Существует два основных подхода:
- Использование специализированных плагинов.
- Реализация собственного кода для автоматизации через WP Cron.
Рассмотрим оба варианта с примерами.
Плагины для автоматического удаления постов
Один из популярных плагинов — Post Expirator. Он позволяет назначать дату истечения для постов, после которой они удаляются или переводятся в черновики.
Также стоит обратить внимание на плагин Clearfy Pro — в нем есть инструменты для оптимизации базы данных и автоматического удаления устаревшего контента с расширенными настройками.
Самописное решение через WP Cron
Если хочется более гибкую настройку и меньше зависеть от плагинов, можно реализовать автоматическое удаление постов через WP Cron — встроенную систему планировщика задач WordPress.
Пример функции, которая удаляет посты старше заданного количества дней:
function wplink_delete_old_posts() {
$days = 180; // число дней, по истечении которых посты удаляются
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => "$days days ago",
),
),
'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 — удалить без возможности восстановления
}
}
}
// Регистрация задачи в WP Cron
function wplink_schedule_delete_old_posts() {
if (!wp_next_scheduled('wplink_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wplink_delete_old_posts_hook');
}
}
add_action('wp', 'wplink_schedule_delete_old_posts');
add_action('wplink_delete_old_posts_hook', 'wplink_delete_old_posts');
В этом коде мы создаём задачу, которая выполняется ежедневно и удаляет все опубликованные посты старше 180 дней. Такой подход позволяет настроить любой срок и типы контента.
Дополнительные настройки и тонкости
Удаление постов по категориям или тегам
Иногда нужно удалять только контент из определённых категорий или с конкретными метками. Для этого в get_posts добавляем параметры таксономий:
$args['category_name'] = 'news'; // например, категория "news"
Или для тегов:
$args['tag'] = 'archive';
Так можно точечно настраивать очистку.
Удалять ли связанные медиафайлы?
По умолчанию функция wp_delete_post удаляет связанные с постом вложения (медиафайлы), если установлен второй параметр в true. Если требуется сохранить файлы, поставьте false.
Логи и уведомления
Для контроля полезно добавлять запись в лог или отправлять уведомление администратору после удаления. Пример уведомления по почте:
function wplink_delete_old_posts() {
// ... код удаления постов ...
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
wp_mail(get_option('admin_email'), 'Автоматическое удаление постов', 'Удалено '.count($old_posts).' старых постов.');
}
}
Оптимизация базы данных после удаления постов
Удаление большого количества записей может оставить в базе «пустоты» и замедлить работу. Рекомендуется после удаления запускать оптимизацию таблиц. Плагин Clearfy Pro предоставляет удобный интерфейс для очистки и оптимизации базы данных.
Также можно использовать SQL-запросы напрямую или плагины, такие как WP-Optimize.
Заключение по автоматическому удалению старых постов
Автоматизация удаления старых постов помогает поддерживать сайт в актуальном состоянии, улучшать производительность и SEO. Выбор между плагинами и собственным кодом зависит от ваших навыков и требований к функционалу.
Используйте приведённые примеры как основу и адаптируйте под свои задачи. Не забывайте делать резервные копии перед массовыми удалениями!