На крупных сайтах WordPress с большим объемом контента часто возникает необходимость автоматизировать удаление устаревших записей или страниц. Это помогает поддерживать актуальность сайта, снижать нагрузку на сервер и упрощать администрирование. В этой статье мы подробно разберем, как настроить автоматическое удаление старого контента в WordPress с помощью собственного кода и рассмотрим несколько плагинов, которые помогут решить эту задачу.
Почему важно удалять старый контент в WordPress
С течением времени на сайте накапливается множество записей, которые уже не актуальны или устарели по тематике. Их хранение может привести к следующим проблемам:
- Падение позиций в поисковой выдаче из-за устаревшей информации;
- Ненужная нагрузка на базу данных и сервер;
- Сложности в навигации и ухудшение пользовательского опыта;
- Увеличение времени бэкапа и обновления сайта.
Решением является регулярное удаление или архивирование устаревших материалов. Автоматизация этого процесса позволит сэкономить время и избежать ошибок.
Как реализовать автоматическое удаление старых записей с помощью кода
Самый гибкий способ — добавить в functions.php вашей темы или в отдельный плагин функцию, которая будет запускаться по расписанию и удалять записи старше заданного времени.
Создаем функцию удаления старых записей
Пример функции, которая удаляет все записи типа post старше 90 дней:
function wpplugins_delete_old_posts() {
global $wpdb;
$days = 90; // количество дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s",
$date_threshold
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true — удалять без корзины
}
}
}Настраиваем Cron для автоматического запуска
Чтобы функция выполнялась регулярно, добавим событие в WP-Cron:
if (!wp_next_scheduled('wpplugins_daily_old_posts_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpplugins_daily_old_posts_cleanup');
}
add_action('wpplugins_daily_old_posts_cleanup', 'wpplugins_delete_old_posts');Этот код запускает функцию wpplugins_delete_old_posts раз в сутки. Можно изменить интервал или настроить более частый запуск, если необходимо.
Удаление старого контента по типам и таксономиям
Иногда нужно удалять записи не только по дате, но и по определенным категориям или типам. Например, удалять старые записи типа product или записи из категории «Новости».
Пример кода с фильтром по категории
function wpplugins_delete_old_news_posts() {
$days = 60; // удалять записи старше 60 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = [
'post_type' => 'post',
'posts_per_page' => -1,
'date_query' => [
[
'column' => 'post_date',
'before' => $date_threshold,
],
],
'category_name' => 'news',
'post_status' => 'publish',
'fields' => 'ids',
];
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}Такой подход позволяет гибко настраивать критерии удаления.
Плагины для автоматического удаления старого контента
Если не хочется писать код, можно воспользоваться готовыми плагинами с похожим функционалом.
1. WP Auto Delete Posts
Плагин позволяет настраивать автоматическое удаление записей по возрасту, типу и категории. Очень удобен для тех, кто не хочет погружаться в код.
Подробнее о WP Auto Delete Posts на WPSHOP
2. Post Expirator (или его аналоги)
Этот плагин позволяет назначать дату истечения для каждой записи. При достижении этой даты запись автоматически удаляется или переводится в черновики.
3. Clearfy Pro
Clearfy Pro содержит инструменты для оптимизации сайта, включая автоматическую очистку устаревшего контента и оптимизацию базы данных. Если вы уже используете Clearfy Pro, можно настроить удаление старых записей через его интерфейс.
Рекомендации по безопасному удалению контента
Перед автоматическим удалением старого контента следует учесть несколько важных моментов:
- Обязательно делайте резервные копии базы данных, чтобы избежать потери важных данных.
- Проверяйте, что удаляются именно нужные записи — настройте фильтры по типу, категории и статусу.
- Если есть сомнения, сначала переключите удаление на перевод в черновики (
wp_update_post(['ID' => $post_id, 'post_status' => 'draft'])), чтобы не потерять информацию окончательно. - Планируйте удаление в ночное время, чтобы не влиять на пользователей.
Заключение
Автоматическое удаление старого контента — важный элемент поддержки и оптимизации сайта на WordPress. Используя приведенные коды и плагины, вы сможете организовать этот процесс удобно и безопасно, снизить нагрузку на сервер и повысить качество сайта для посетителей.
Если вы хотите расширить функциональность сайта и использовать готовые решения, рекомендуем посетить WPSHOP — здесь есть много полезных плагинов и тем для WordPress.