Поддержка актуальности и чистоты контента на сайте — важная задача для любого владельца WordPress-сайта. Со временем на сайте скапливаются устаревшие записи, черновики и страницы, которые не нужны, но занимают место в базе данных и могут замедлять работу сайта. В этой статье разберём, как организовать автоматическое удаление старого контента в WordPress — с помощью штатных инструментов, плагинов и собственного кода.
Почему важно удалять старый контент и как определить его критерии
Удаление устаревших записей помогает:
- Оптимизировать базу данных, повысить скорость сайта.
- Упорядочить контент для удобства пользователей и редакторов.
- Избежать путаницы и дублирования информации.
Для автоматизации нужно определить, какой контент считается старым. Часто под этим понимают записи, не обновлявшиеся или не просматривавшиеся определённое время, например, больше года назад. Также можно учитывать конкретные категории, статусы (например, черновики) или типы записей.
Автоматизация через WP-Cron: базовый пример кода
WP-Cron — встроенный механизм планировщика заданий в WordPress. Его можно использовать для регулярного запуска скрипта удаления старого контента. Рассмотрим пример, как реализовать такую функцию.
function wpassist_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '1 year ago',
),
),
'post_type' => 'post',
'post_status' => 'publish',
'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 — принудительное удаление без отправки в корзину
}
}
}
// Регистрируем событие, если его ещё нет
if (!wp_next_scheduled('wpassist_daily_old_posts_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpassist_daily_old_posts_cleanup');
}
// Привязываем функцию к событию
add_action('wpassist_daily_old_posts_cleanup', 'wpassist_delete_old_posts');Этот код удаляет все опубликованные записи старше года. Его можно адаптировать, например, добавить удаление черновиков или страниц.
Настройка частоты и критериев удаления
WP-Cron поддерживает стандартные интервалы: hourly, twicedaily, daily. Чтобы добавить собственные, можно использовать фильтр cron_schedules. Пример:
function wpassist_custom_cron_schedule($schedules) {
$schedules['weekly'] = array(
'interval' => 604800, // 7 дней в секундах
'display' => __('Раз в неделю'),
);
return $schedules;
}
add_filter('cron_schedules', 'wpassist_custom_cron_schedule');После этого можно заменить 'daily' на 'weekly' в планировщике.
Использование плагинов для автоматического удаления контента
Если вы не хотите писать код, есть несколько плагинов, которые помогут автоматизировать удаление старых записей:
- Delete Old Posts — позволяет настраивать удаление по дате, категории и другим параметрам.
- Auto Post Delete — удаляет посты по заданным правилам, включая статус и возраст.
- WP Bulk Delete — мощный инструмент для массового удаления записей по разным критериям с поддержкой расписания.
Например, WP Bulk Delete обладает удобным интерфейсом и позволяет создавать расписание для удаления записей определённого типа, статуса, категории и возраста. Для интеграции с WP-Cron плагин использует собственные хуки, что упрощает автоматизацию.
Автоматическое удаление черновиков и мусорных записей
Черновики и записи в корзине тоже могут копиться и занимать место. WordPress автоматически очищает корзину через 30 дней, а черновики — нет. Чтобы настроить автоматическое удаление черновиков старше определённого срока, можно добавить следующий код:
function wpassist_delete_old_drafts() {
$args = array(
'post_status' => 'draft',
'date_query' => array(
array(
'column' => 'post_modified',
'before' => '30 days ago',
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$drafts = get_posts($args);
foreach ($drafts as $draft_id) {
wp_delete_post($draft_id, true);
}
}
add_action('wpassist_daily_old_posts_cleanup', 'wpassist_delete_old_drafts');Этот код можно включить в ту же задачу WP-Cron, что и удаление старых постов.
Рекомендации по безопасности и резервному копированию
Автоматическое удаление контента — операция необратимая, особенно при использовании параметра wp_delete_post с true (принудительное удаление без корзины). Рекомендуется:
- Регулярно делать резервные копии базы данных и файлов сайта.
- Тестировать код на тестовом стенде перед запуском на живом сайте.
- Добавлять условия для исключения из удаления важных страниц или записей по ID, категориям или меткам.
Например, добавить проверку исключений:
if (!in_array($post_id, array(1, 2, 3))) {
wp_delete_post($post_id, true);
}Интеграция с плагином Clearfy Pro для оптимизации
Плагин Clearfy Pro предоставляет расширенные возможности оптимизации сайта, включая удаление ненужных данных и оптимизацию базы данных. Его инструменты могут дополнять собственные скрипты, помогая автоматизировать очистку и ускорять сайт без риска.
Clearfy Pro позволяет:
- Автоматически удалять ревизии, спам-комментарии и временные данные.
- Очищать неиспользуемые таксономии и метаданные.
- Настраивать расписание очистки и оптимизации.
Таким образом, сочетание собственного кода и профессиональных плагинов повышает эффективность управления контентом.
Выводы и советы по внедрению
Автоматизация удаления старого контента в WordPress — задача вполне решаемая как с помощью кода, так и готовых плагинов. Главное — точно определить критерии устаревания, тщательно тестировать скрипты и всегда иметь резервную копию сайта. Использование WP-Cron в связке с кастомными функциями или плагинами типа WP Bulk Delete и Clearfy Pro даст надежный и гибкий инструмент для поддержания сайта в чистоте и порядке.