В WordPress нередко возникает задача автоматического удаления старого контента, например, устаревших постов, новостей или других записей, которые больше не актуальны. В этой статье мы подробно разберем, как реализовать автоматическое удаление старых записей с помощью CRON задач WordPress, чтобы освободить место и поддерживать актуальность сайта.
Что такое WP-Cron и почему его использовать
WP-Cron – это встроенный механизм планировщика задач в WordPress, который позволяет запускать определенный код по расписанию без необходимости настраивать системные CRON задачи на сервере. Он отлично подходит для автоматизации различных процессов, в том числе и удаления устаревших записей.
Главное преимущество WP-Cron в том, что он запускается при заходе пользователя на сайт, что упрощает настройку и не требует доступа к серверу, но есть и минусы — если мало трафика, задачи могут срабатывать с задержкой.
Как определить, какие записи удалять автоматически
Перед тем как писать код, нужно чётко определить критерии удаления. Например:
- Удалять все записи старше 30 дней
- Удалять только записи определённого типа (посты, кастомные типы)
- Удалять записи с определённым статусом (опубликованные, черновики)
В примерах ниже мы будем удалять посты старше 30 дней.
Пример кода для автоматического удаления старых записей
Создадим функцию wpmanual_delete_old_posts, которая выполнит выборку и удаление записей по условию, а затем подключим её к планировщику WP-Cron.
function wpmanual_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 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 — удаление без перемещения в корзину
}
}
}Эта функция получает ID всех опубликованных постов старше 30 дней и удаляет их без возможности восстановления из корзины.
Регистрация CRON задачи в WordPress
Теперь нужно создать событие, которое будет запускать эту функцию периодически. Для этого добавим хук и функцию активации CRON:
function wpmanual_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpmanual_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpmanual_daily_delete_old_posts');
}
}
add_action('wp', 'wpmanual_schedule_old_posts_deletion');
add_action('wpmanual_daily_delete_old_posts', 'wpmanual_delete_old_posts');Данный код проверяет, запланирована ли уже задача на удаление старых постов, и если нет — создает её с ежедневным интервалом. Затем он привязывает запуск функции удаления к этому событию.
Как удалить CRON задачу при деактивации плагина или темы
Чтобы избежать накопления лишних задач, важно корректно удалять CRON при отключении функционала. Добавим функцию для удаления задачи:
function wpmanual_clear_scheduled_old_posts_deletion() {
$timestamp = wp_next_scheduled('wpmanual_daily_delete_old_posts');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpmanual_daily_delete_old_posts');
}
}Эту функцию нужно вызвать при деактивации плагина или темы, например через хук register_deactivation_hook.
Оптимизация и безопасность процесса удаления
Удаление большого количества записей за один проход может нагрузить сервер. Чтобы избежать этого, можно разбивать удаление на части, например, удалять по 20 записей за раз и запускать задачу чаще, например, каждые 6 часов.
Также важно помнить про безопасность: функция wp_delete_post автоматически обрабатывает все необходимые очистки, включая удаление связанных метаданных и таксономий.
Плагины для управления CRON и автоматизацией
Если предпочитаете не писать код вручную, можно использовать плагины для управления WP-Cron и автоматизацией задач:
- WP Crontrol — позволяет просматривать, редактировать и запускать CRON задачи вручную.
- Clearfy Pro — расширяет возможности оптимизации сайта, включая управление задачами и очистку базы данных.
Итоги
Автоматическое удаление старых записей через WP-Cron — эффективный способ поддерживать чистоту и актуальность вашего WordPress-сайта. Используйте предоставленный код, адаптируйте его под свои задачи, и не забывайте о безопасности и нагрузке сервера.
Если хотите более простой способ с расширенными функциями, рекомендую ознакомиться с плагином Clearfy Pro, который поможет автоматизировать многие рутинные задачи на сайте.