Автоматизация удаления старых записей в WordPress — важная задача для поддержания чистоты и производительности сайта. Особенно актуально это для блогов с большим количеством постов, новостных порталов и сайтов с пользовательским контентом. В этой статье разберём, как реализовать удаление постов старше определённого срока с помощью PHP-кода и WordPress Cron, без использования тяжёлых плагинов.
Почему важно удалять старые записи автоматически
Со временем база данных WordPress может разрастаться, что замедляет работу сайта и увеличивает нагрузку на сервер. Удаление устаревшего контента помогает:
- Снизить размер базы данных и время её резервного копирования.
- Увеличить скорость работы сайта.
- Поддерживать актуальность контента.
- Избежать накопления мусорных данных, которые не приносят пользы.
Автоматизация этого процесса экономит время администратора и исключает человеческий фактор.
Настройка WP Cron для автоматического удаления старых записей
WordPress имеет встроенный механизм планировщика задач — WP Cron. Он позволяет запускать функции по расписанию. Для удаления старых постов нужно создать собственное событие и функцию, которая будет удалять записи старше заданного количества дней.
Шаг 1. Создаём функцию удаления старых записей
Добавьте следующий код в файл functions.php вашей дочерней темы или в плагин для кастомного функционала:
function wpacademy_delete_old_posts() {
$days_to_keep = 365; // количество дней хранения записей
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));
// Получаем ID постов старше $days_to_keep дней
$old_posts = get_posts(array(
'date_query' => array(
array(
'before' => $date_threshold,
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удаляет без перемещения в корзину
}
}
}В этом коде мы определяем порог удаления — записи старше 365 дней будут удалены. Можно изменить значение $days_to_keep на любое удобное.
Шаг 2. Регистрируем событие в WP Cron
Теперь нужно создать событие, которое будет запускать функцию wpacademy_delete_old_posts() регулярно, например, раз в сутки. Добавьте следующий код:
function wpacademy_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpacademy_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpacademy_daily_delete_old_posts');
}
}
add_action('wp', 'wpacademy_schedule_old_posts_deletion');
add_action('wpacademy_daily_delete_old_posts', 'wpacademy_delete_old_posts');Этот код проверяет, запланировано ли событие, и если нет — создаёт его с интервалом 'daily' (раз в сутки). Функция wpacademy_delete_old_posts вызывается при срабатывании события.
Дополнительные рекомендации и проверка работы
Отладка и логирование удаления
Для контроля процесса полезно добавить логирование. Например, можно записывать в файл количество удалённых записей:
function wpacademy_delete_old_posts() {
$days_to_keep = 365;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));
$old_posts = get_posts(array(
'date_query' => array(
array('before' => $date_threshold, 'inclusive' => true),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
));
$deleted_count = 0;
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
if (wp_delete_post($post_id, true)) {
$deleted_count++;
}
}
}
error_log("[WPAcademy] Deleted $deleted_count old posts older than $days_to_keep days.");
}Лог можно смотреть в файле debug.log, если включена отладка WordPress.
Как проверить, что WP Cron работает
WP Cron запускается при посещении сайта, если нет внешнего системного cron. Для теста можно временно уменьшить интервал или вызвать функцию вручную:
add_action('init', function() {
if (current_user_can('administrator')) {
wpacademy_delete_old_posts();
echo 'Old posts deletion triggered';
exit;
}
});Этот код выполнит удаление при заходе администратора на сайт, после чего выведет сообщение и завершит работу.
Использование плагинов для управления удалением старого контента
Если не хочется писать код, можно использовать плагины. Однако многие из них перегружены дополнительным функционалом. Рекомендуем обратить внимание на плагины с возможностью кастомных задач WP Cron или оптимизации базы, например:
- Clearfy Pro — плагин для оптимизации и чистки базы, включая удаление старого контента.
- Плагины для создания кастомных Cron задач (например, WP Crontrol) — для контроля и отладки своих событий.
Заключение
Автоматическое удаление старых записей через PHP и WP Cron — простой и эффективный способ поддерживать чистоту базы данных WordPress. Такой подход позволяет избежать чрезмерного разрастания контента, ускорить работу сайта и снизить нагрузку на сервер. Используйте представленный код как основу для своих задач и адаптируйте под конкретные требования.