В администрировании сайтов на WordPress часто возникает задача автоматически удалять устаревший контент — например, записи или страницы старше определённого срока. Это важно для поддержания актуальности сайта и оптимизации базы данных. В этой статье расскажу, как реализовать автоматическое удаление старых записей с помощью встроенного планировщика заданий WordPress — wp-cron.
Что такое wp-cron и зачем он нужен для автоматического удаления записей
WP-Cron — это встроенный в WordPress механизм имитации системного cron, который позволяет выполнять задачи по расписанию. В отличие от классических cron-задач на сервере, wp-cron запускается при обращении к сайту, что упрощает настройку, но требует трафика для срабатывания.
Используя wp-cron, можно программно задать периодические задачи, например, проверять наличие записей старше 30 дней и удалять их автоматически. Это удобно для сайтов с большим количеством устаревшего контента, например, новостных порталов, блогов с временными публикациями, каталогов.
Как создать функцию для удаления старых записей в WordPress
Первым шагом создадим функцию, которая будет находить и удалять записи старше указанного времени. В примере ниже удаляются записи типа post, опубликованные более 30 дней назад.
function wplike_delete_old_posts() {
$days = 30; // Количество дней, после которых записи считаются устаревшими
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => $date_threshold,
'inclusive' => true,
),
),
'fields' => 'ids', // Получаем только ID записей
'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 - удалять без возможности восстановления
}
}
}Эта функция выбирает все опубликованные записи старше 30 дней и удаляет их без помещения в корзину. При необходимости можно изменить тип постов или статус, а также настроить количество дней.
Регистрация задания в wp-cron для автоматического запуска
Чтобы функция выполнялась регулярно, нужно зарегистрировать крон-задачу. В WordPress это делается через wp_schedule_event. Добавим проверку и регистрацию при инициализации плагина или темы.
function wplike_register_cron_job() {
if (!wp_next_scheduled('wplike_delete_old_posts_event')) {
wp_schedule_event(time(), 'daily', 'wplike_delete_old_posts_event');
}
}
add_action('wp', 'wplike_register_cron_job');
add_action('wplike_delete_old_posts_event', 'wplike_delete_old_posts');Здесь мы создаём событие wplike_delete_old_posts_event, которое срабатывает ежедневно. При его срабатывании вызывается функция wplike_delete_old_posts. Это гарантирует, что удаление старых записей происходит автоматически.
Как тестировать и отлаживать wp-cron задачи
Поскольку wp-cron запускается при посещении сайта, для тестирования можно вручную вызвать событие:
do_action('wplike_delete_old_posts_event');Этот вызов выполнит функцию удаления сразу. Рекомендуется сначала проверить, какие записи будут удалены, не вызывая удаления, а выводя их ID или заголовки:
function wplike_check_old_posts() {
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => $date_threshold,
'inclusive' => true,
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
error_log('Старый пост: ID ' . $post_id . ' - ' . get_the_title($post_id));
}
} else {
error_log('Старых постов нет');
}
}После проверки можно запускать удаление.
Расширение функциональности: удаление записей по кастомным условиям
Выше мы рассмотрели простой пример с типом поста «post» и возрастом 30 дней. Но можно адаптировать код под свои задачи:
- Удалять записи определённого таксономического термина (например, рубрики) — добавьте параметр
tax_queryв запрос. - Удалять кастомные типы записей, например,
wplike_newsилиwplike_event. - Удалять записи, содержащие определённое мета-поле или значение.
Пример добавления фильтра по таксономии:
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'news',
),
);Такой подход позволит более гибко управлять удалением контента.
Использование плагина Clearfy Pro для управления cron в WordPress
Если хочется упростить работу с cron-заданиями, можно обратить внимание на плагин Clearfy Pro. Он позволяет просматривать, управлять и оптимизировать задачи wp-cron через удобный интерфейс.
С Clearfy Pro можно:
- Отключить ненужные cron-задания, чтобы снизить нагрузку.
- Добавлять собственные задачи через UI без кода.
- Легко отлаживать и мониторить работу cron.
Это особенно полезно на больших сайтах с множеством запланированных задач.
Итоги и рекомендации по автоматическому удалению старых записей
Автоматизация удаления устаревшего контента — важная часть поддержки сайта. Используя wp-cron и собственные функции, вы можете держать сайт в актуальном состоянии без лишних усилий. Главное — тщательно тестировать код и не удалять важные данные по ошибке.
Если вы хотите расширить возможности и упростить управление — попробуйте использовать Clearfy Pro.