В WordPress часто возникает задача автоматического удаления старых записей, связанных между собой, например, устаревших ревизий, черновиков или кастомных типов записей, которые более не актуальны. Особенно это важно для поддержания чистоты базы данных и оптимизации скорости сайта. В этой статье разберём, как настроить автоматическое удаление таких записей с помощью собственного кода и дополнительных плагинов.
Почему важно удалять старые связанные записи
Часто в WordPress накапливаются записи, которые уже не нужны, но остаются в базе данных. Например, это могут быть:
- Ревизии постов, которые занимают место и замедляют работу сайта.
- Черновики, заброшенные автором.
- Связанные кастомные типы записей, например, отзывы или события, срок действия которых истёк.
Без регулярного удаления таких данных база разрастается, увеличивается время обработки запросов и нагрузка на сервер.
Автоматизация этого процесса экономит время и поддерживает сайт в порядке.
Как определить связанные записи и их удалять
Для удаления связанных записей сначала нужно понять, по какому признаку они связаны. Это может быть метаполе, таксономия или поле связи post_parent.
Рассмотрим пример: у вас есть кастомный тип записи event, а у каждого события есть дочерние записи event_ticket. Нужно автоматически удалять билеты, если событие старше 30 дней.
Пример кода для удаления старых дочерних записей
function wptests_delete_old_event_tickets() {
$date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
// Получаем события старше 30 дней
$old_events = get_posts(array(
'post_type' => 'event',
'date_query' => array(
array(
'before' => $date_threshold,
),
),
'fields' => 'ids',
'posts_per_page' => -1,
));
if (empty($old_events)) {
return;
}
foreach ($old_events as $event_id) {
// Получаем связанные билеты
$tickets = get_posts(array(
'post_type' => 'event_ticket',
'post_parent' => $event_id,
'fields' => 'ids',
'posts_per_page' => -1,
));
foreach ($tickets as $ticket_id) {
wp_delete_post($ticket_id, true); // Полное удаление
}
}
}
// Запускаем функцию раз в сутки
if (!wp_next_scheduled('wptests_daily_old_tickets_cleanup')) {
wp_schedule_event(time(), 'daily', 'wptests_daily_old_tickets_cleanup');
}
add_action('wptests_daily_old_tickets_cleanup', 'wptests_delete_old_event_tickets');Этот код надо добавить в functions.php вашей темы или в кастомный плагин. Он создаёт ежедневное задание, которое ищет события старше 30 дней и удаляет все связанные с ними билеты.
Удаление ревизий и черновиков с помощью плагинов
Если вы хотите удалить ревизии и черновики без написания кода, можно использовать плагины. Один из популярных — Clearfy Pro. В нём есть опция автоматического удаления ревизий и чистки базы данных.
Также хорошо подходит WPRemark, если нужно управлять отзывами и удалять устаревшие.
Оптимизация и безопасность автоматического удаления
При автоматическом удалении важно:
- Тестировать код на тестовом сайте, чтобы не удалить важные данные.
- Использовать wp_delete_post с параметром
$force_delete = true, чтобы избежать попадания постов в корзину и уменьшить размер базы. - Добавлять логи удаления для контроля.
- Ограничивать количество удаляемых за один запуск, чтобы не перегружать сервер.
Пример добавления лимита:
foreach ($tickets as $index => $ticket_id) {
if ($index >= 50) break; // Удаляем максимум 50 за раз
wp_delete_post($ticket_id, true);
}Другие подходы к удалению связанных записей
Если записи связаны через метаполя, то запрос и удаление будут немного другими. Например, для удаления записей с метаполем related_event равным ID события, можно использовать WP_Query с мета-запросом.
$tickets = get_posts(array(
'post_type' => 'event_ticket',
'meta_key' => 'related_event',
'meta_value' => $event_id,
'fields' => 'ids',
'posts_per_page' => -1,
));Такой подход универсален, если связи реализованы через метаполя.
Выводы по теме
Автоматическое удаление старых связанных записей — важная задача для поддержания производительности WordPress-сайта. Использование WP-Cron позволяет запускать такие процессы регулярно, а кастомный код даёт гибкость под любые структуры данных. Плагины вроде Clearfy Pro упрощают работу с ревизиями и черновиками, освобождая время разработчика.