Если у вас на сайте WordPress со временем накапливается множество устаревших записей, черновиков или ревизий, это может замедлить работу сайта и усложнить управление контентом. В этой статье мы подробно разберём, как реализовать автоматическое удаление старого контента в WordPress, используя как готовые плагины, так и собственные решения на PHP с примерами кода.
Почему важно удалять старый контент автоматически
Старые записи, особенно если они больше не актуальны, занимают место в базе данных, увеличивают нагрузку на сервер и могут негативно влиять на SEO вашего сайта. Автоматизация очистки помогает поддерживать чистоту и быстродействие сайта без лишних временных затрат.
Удаление можно настроить для черновиков, авто-сохранений, устаревших постов определённого типа, ревизий и даже комментариев.
Плагины для автоматического удаления старого контента
Clearfy Pro – автоматизация очистки базы данных
Плагин Clearfy Pro позволяет настроить удаление ревизий, черновиков, старых комментариев и других ненужных данных по расписанию. Это отличный инструмент для тех, кто хочет контролировать очистку базы без программирования.
WP-Optimize
WP-Optimize – популярный плагин, который очищает базу данных, удаляя старые ревизии, спам и неактуальный контент. Здесь можно настроить автоматическую очистку по расписанию, что экономит время.
Самостоятельное решение: как написать функцию для удаления старых записей
Если вы предпочитаете более тонкую настройку и не хотите использовать плагины, можно реализовать автоматическую очистку с помощью WP Cron и пользовательской функции на PHP.
Создание функции удаления постов старше N дней
function wpzoom_delete_old_posts() {
$days = 30; // Удалять записи старше 30 дней
$args = array(
'post_type' => 'post',
'post_status' => array('publish', 'draft'),
'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 – удаление без перемещения в корзину
}
}
}
Этот код выбирает все записи типа post со статусом опубликовано и черновик, дата которых старше 30 дней, и удаляет их без возможности восстановления.
Подключение функции к WP Cron
Чтобы функция выполнялась автоматически, зарегистрируем собственное событие WP Cron.
function wpzoom_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpzoom_delete_old_posts_event')) {
wp_schedule_event(time(), 'daily', 'wpzoom_delete_old_posts_event');
}
}
add_action('wp', 'wpzoom_schedule_old_posts_deletion');
add_action('wpzoom_delete_old_posts_event', 'wpzoom_delete_old_posts');
Этот код запустит очистку базы данных с удалением старых постов один раз в сутки.
Удаление старых черновиков и ревизий
Кроме опубликованных и черновых записей, важна очистка ревизий — они накапливаются и занимают много места.
Удаление ревизий
function wpzoom_delete_old_revisions() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
}
add_action('wpzoom_delete_old_posts_event', 'wpzoom_delete_old_revisions');
Этот код удалит все ревизии при запуске вашего планировщика событий.
Удаление старых черновиков
function wpzoom_delete_old_drafts() {
$days = 7; // Удалять черновики старше 7 дней
$args = array(
'post_type' => 'post',
'post_status' => 'draft',
'date_query' => array(
array(
'column' => 'post_modified',
'before' => "$days days ago",
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_drafts = get_posts($args);
if (!empty($old_drafts)) {
foreach ($old_drafts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpzoom_delete_old_posts_event', 'wpzoom_delete_old_drafts');
Так вы избавитесь от ненужных и забытых черновиков, которые не планируете публиковать.
Удаление устаревших записей по меткам, категориям или типам контента
Иногда нужно удалять не все старые записи, а только из определённой категории или с конкретной меткой. Для этого достаточно добавить параметры в WP_Query.
function wpzoom_delete_old_posts_by_category() {
$days = 60; // Удалять записи старше 60 дней
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => "$days days ago",
),
),
'category_name' => 'news', // категория для удаления
'fields' => 'ids',
'posts_per_page' => -1,
);
$posts = get_posts($args);
if (!empty($posts)) {
foreach ($posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
add_action('wpzoom_delete_old_posts_event', 'wpzoom_delete_old_posts_by_category');
Таким образом можно гибко управлять очисткой контента на сайте.
Советы по безопасности и тестированию
При автоматическом удалении контента всегда проверяйте работу кода на тестовом сайте, чтобы избежать потери важных данных. Рекомендуется делать резервные копии базы данных перед внедрением таких решений.
Также можно добавить логирование удалённых постов, чтобы отслеживать процесс и быстро реагировать на ошибки.
Заключение
Автоматическое удаление старого контента в WordPress — важный инструмент для поддержания производительности и актуальности сайта. Используйте плагины, если хотите быстро и без кода, либо реализуйте собственные решения с помощью WP Cron и функций PHP для гибкой настройки процесса.
Если хотите простой и мощный инструмент, обратите внимание на Clearfy Pro — он уже содержит все необходимые функции для очистки базы и удобный интерфейс.