Управление контентом — важная часть администрирования сайта на WordPress. Со временем на сайте накапливаются устаревшие или неактуальные записи, которые могут замедлять работу базы данных и ухудшать пользовательский опыт. В этой статье подробно разберём, как организовать автоматическое удаление старого контента в WordPress, используя как код, так и плагины.
Почему важно удалять старый контент в WordPress
Старые посты, черновики или устаревшие страницы могут негативно влиять на производительность сайта. База данных растёт, запросы к ней становятся дольше, что сказывается на скорости загрузки страниц. Кроме того, неактуальный контент может сбивать с толку пользователей и ухудшать SEO. Автоматическое удаление позволяет поддерживать чистоту и актуальность сайта без постоянного ручного контроля.
Рассмотрим несколько способов реализации автоматического удаления с разной степенью гибкости и контроля.
Удаление старого контента с помощью WP-Cron и пользовательской функции
Создание функции удаления старых постов
Для автоматизации удаления можно использовать встроенный механизм планировщика задач WordPress — WP-Cron. Ниже пример функции, которая удаляет все записи старше 180 дней:
function wplearn_delete_old_posts() {
global $wpdb;
$days = 180; // количество дней
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$posts = get_posts(array(
'date_query' => array(
array(
'before' => $date,
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'numberposts' => -1,
'fields' => 'ids',
));
if (!empty($posts)) {
foreach ($posts as $post_id) {
wp_delete_post($post_id, true); // true - удалить без возможности восстановления
}
}
}Регистрация задачи в WP-Cron
Теперь нужно зарегистрировать периодическую задачу, чтобы функция запускалась, например, раз в сутки:
function wplearn_schedule_old_post_deletion() {
if (!wp_next_scheduled('wplearn_daily_old_post_deletion')) {
wp_schedule_event(time(), 'daily', 'wplearn_daily_old_post_deletion');
}
}
add_action('wp', 'wplearn_schedule_old_post_deletion');
add_action('wplearn_daily_old_post_deletion', 'wplearn_delete_old_posts');Такой подход полностью автоматизирован и не требует плагинов. Однако стоит внимательно тестировать функцию, чтобы не удалить важный контент по ошибке.
Использование плагинов для автоматического удаления старого контента
Плагин Auto Post Delete
Один из популярных плагинов — Auto Post Delete. Он позволяет настроить удаление постов по возрасту, категории, статусу и другим параметрам через удобный интерфейс.
Преимущества:
- Простая настройка без кода
- Фильтрация по типам постов и таксономиям
- Возможность сохранения важных постов
Минусы — дополнительная нагрузка на сайт и зависимость от обновлений плагина.
Плагин Clearfy Pro для оптимизации базы данных
Если вы используете Clearfy Pro, то там есть функционал для автоматической очистки и удаления устаревших ревизий, автосохранений и даже постов по правилам. Это позволяет комплексно поддерживать базу данных в чистоте.
Дополнительные советы по безопасному удалению контента
Перед внедрением автоматического удаления обязательно сделайте резервные копии базы данных — это поможет быстро восстановить данные в случае ошибки.
Рекомендуется сначала настроить функцию или плагин на удаление неактуального, но не важного контента, например, черновиков или старых ревизий.
Для большей безопасности можно реализовать предварительный этап — перевод старого поста в статус «черновик» или «архив», а затем удаление через определённое время.
Пример расширения функции: удаление старых записей по категории
Иногда нужно удалять не все старые посты, а только из определённых категорий. Вот пример кода для такой задачи:
function wplearn_delete_old_posts_by_category($category_slug, $days = 180) {
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$posts = get_posts(array(
'category_name' => $category_slug,
'date_query' => array(
array(
'before' => $date,
'inclusive' => true,
),
),
'post_status' => 'publish',
'numberposts' => -1,
'fields' => 'ids',
));
if (!empty($posts)) {
foreach ($posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
// Пример вызова функции для категории 'news'
add_action('wplearn_daily_old_post_deletion', function() {
wplearn_delete_old_posts_by_category('news', 90);
});Такой подход позволяет гибко управлять удалением контента в зависимости от тематики и актуальности.
Выводы и рекомендации по автоматическому удалению контента
Автоматизация удаления старого контента в WordPress — отличный способ поддерживать сайт в порядке и повышать производительность. Самый простой вариант — использовать WP-Cron с собственной функцией, дающей полный контроль и не требующей плагинов.
Если вы предпочитаете готовые решения, обратите внимание на плагины Auto Post Delete и Clearfy Pro, которые помогут настроить процесс без сложного кода.
Обязательно тестируйте все изменения на тестовом сайте, делайте резервные копии и внимательно подбирайте критерии удаления, чтобы не потерять важные данные.