Ведение сайта на WordPress часто сопровождается накоплением большого количества устаревшего контента: старых записей, черновиков, ревизий или даже автоматических сохранений. Это влияет на производительность сайта и усложняет работу с базой данных. В этой статье разберём, как настроить автоматическое удаление старых записей через CRON задачи в WordPress, чтобы поддерживать сайт в чистоте и порядке без лишних усилий.
Почему важно удалять старые записи автоматически
Многие забывают о том, что даже неактуальный контент занимает место в базе данных и замедляет работу сайта. Ручное удаление — это трудоёмкий процесс, особенно если сайт активен и публикаций много. Автоматизация через CRON позволяет настроить регулярное удаление записей по заданным критериям, например, старше 1 года, или статусов, например, черновики.
Такой подход обеспечивает:
- Оптимизацию базы данных и ускорение запросов;
- Уменьшение нагрузки на хостинг;
- Чистоту админки — меньше мусора;
- Автоматический контроль без участия администратора.
Используем WordPress CRON для автоматического удаления
WordPress имеет собственную систему планировщика задач — WP-Cron. Она запускается при каждом заходе на сайт и позволяет выполнять задачи по расписанию. Для удаления старых записей нам нужно:
- Создать функцию, которая удаляет записи по нужному условию;
- Зарегистрировать задачу в WP-Cron с определённым интервалом;
- Обеспечить возможность отмены задачи, если потребуется.
Пример такой функции, которая удаляет записи, опубликованные более года назад:
function wpmanual_delete_old_posts() {
global $wpdb;
$date = date('Y-m-d H:i:s', strtotime('-1 year'));
$posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_date < %s AND post_status = 'publish'",
$date
));
foreach ($posts as $post_id) {
wp_delete_post($post_id, true); // true — удаление без перемещения в мусор
}
}Регистрация CRON задачи в WordPress
Теперь нужно добавить задачу в расписание. Для этого используем хук wpmanual_schedule_delete_old_posts и функцию wp_schedule_event. Добавим следующий код в файл functions.php или в отдельный плагин:
function wpmanual_schedule_cron_job() {
if (!wp_next_scheduled('wpmanual_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wpmanual_delete_old_posts_hook');
}
}
add_action('wp', 'wpmanual_schedule_cron_job');
add_action('wpmanual_delete_old_posts_hook', 'wpmanual_delete_old_posts');Этот код проверит, не запланирована ли уже задача, и если нет — создаст ежедневный запуск. Хук wpmanual_delete_old_posts_hook вызывает функцию удаления записей.
Как отменить CRON задачу
Если нужно остановить автоматическое удаление, используйте функцию отмены расписания:
function wpmanual_clear_cron_job() {
$timestamp = wp_next_scheduled('wpmanual_delete_old_posts_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpmanual_delete_old_posts_hook');
}
}Вызовите wpmanual_clear_cron_job() один раз, чтобы отключить задачу.
Удаление записей по другим критериям: черновики, ревизии, спам-комментарии
Помимо опубликованных записей, полезно очищать базу и от других типов данных. Рассмотрим примеры удаления черновиков и ревизий.
Удаление старых черновиков
Черновики могут накапливаться месяцами. Чтобы удалить черновики старше 30 дней, используйте такой код:
function wpmanual_delete_old_drafts() {
global $wpdb;
$date = date('Y-m-d H:i:s', strtotime('-30 days'));
$drafts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_date < %s AND post_status = 'draft'",
$date
));
foreach ($drafts as $draft_id) {
wp_delete_post($draft_id, true);
}
}Добавьте вызов этой функции в отдельный CRON или объедините с основной функцией удаления.
Удаление ревизий
Ревизии накапливаются в базе и занимают место. Для удаления всех ревизий используйте:
function wpmanual_delete_post_revisions() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
}Эту функцию можно запускать вручную или настроить периодически через CRON.
Плагины для автоматизации очистки и оптимизации
Если вы предпочитаете готовые решения или хотите расширить функциональность, рекомендуем обратить внимание на плагины:
- Clearfy Pro — плагин для оптимизации и очистки базы данных, умеет удалять ревизии, черновики и многое другое по расписанию;
- WPRemark — плагин с расширенным управлением контентом, позволяет настраивать автоматическое удаление;
- ABC Pagination — помогает оптимизировать вывод большого количества записей, снижая нагрузку.
Использование плагинов экономит время и минимизирует ошибки при настройке CRON.
Рекомендации по безопасности и производительности
При автоматическом удалении важно соблюдать осторожность, чтобы не потерять нужные данные. Советую:
- Перед запуском на живом сайте протестировать код в тестовой среде;
- Создавать резервные копии базы данных перед активацией CRON задач;
- Ограничивать удаление только явно устаревших и неактивных записей;
- Использовать функцию
wp_delete_postс параметромtrueдля полного удаления, если мусор не нужен; - Мониторить логи ошибок и производительности после запуска задач.
Также не забывайте, что WP-Cron зависит от посещений сайта. Для критичных задач лучше настроить системный CRON на сервере.