В работе с WordPress иногда возникает задача удалять устаревшие записи определенных типов автоматически. Это особенно актуально для сайтов с большим объемом контента, где старые записи теряют актуальность и засоряют базу данных. В этой статье мы рассмотрим, как организовать автоматическое удаление записей по кастомным типам и дате публикации с помощью кода и плагинов.
Зачем нужна автоматизация удаления записей
Ручное удаление устаревших записей — трудоемкий и неэффективный процесс. Автоматизация решения позволяет:
- Поддерживать актуальность контента без лишних усилий.
- Сократить нагрузку на базу данных, улучшая производительность сайта.
- Уменьшить объем резервных копий и ускорить процессы бэкапа.
Особенно это важно, если на сайте есть кастомные типы записей, например, объявления, мероприятия или отзывы, которые имеют ограниченный срок актуальности.
Автоматическое удаление записей с помощью WP Cron
WordPress имеет встроенную систему планировщика задач — WP Cron, которая позволяет запускать функции по расписанию. Мы можем написать собственную функцию и зарегистрировать её запуск, например, раз в сутки, для удаления записей старше определенного срока.
Пример функции удаления записей старше 30 дней
function wpedu_delete_old_posts() {
$args = array(
'post_type' => 'custom_post', // замените на ваш тип записи
'date_query' => array(
array(
'before' => '30 days ago',
'inclusive' => true,
),
),
'posts_per_page' => -1,
'fields' => 'ids',
'post_status' => 'publish',
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true — удаление без перемещения в корзину
}
}
}
// Регистрация события, если еще не зарегистрировано
if (!wp_next_scheduled('wpedu_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpedu_daily_delete_old_posts');
}
// Хук для запуска функции
add_action('wpedu_daily_delete_old_posts', 'wpedu_delete_old_posts');
В этом примере мы удаляем записи типа custom_post, опубликованные более 30 дней назад. Чтобы использовать пример, замените custom_post на ваш кастомный тип записи.
Удаление по нескольким условиям: статус, метки, категории
Вы можете усложнить запрос, добавив другие параметры, например, удалять записи только с определенным статусом или метками. Рассмотрим пример удаления записей с меткой "архив" и датой публикации более 60 дней назад:
function wpedu_delete_archived_old_posts() {
$args = array(
'post_type' => 'post',
'tag' => 'archive',
'date_query' => array(
array('before' => '60 days ago'),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$posts_to_delete = get_posts($args);
foreach ($posts_to_delete as $post_id) {
wp_delete_post($post_id, true);
}
}
if (!wp_next_scheduled('wpedu_daily_delete_archived_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpedu_daily_delete_archived_old_posts');
}
add_action('wpedu_daily_delete_archived_old_posts', 'wpedu_delete_archived_old_posts');
Этот код полезен, когда необходимо удалять только записи с определенными характеристиками, например, устаревшие архивные материалы.
Плагины для автоматического удаления записей
Если вы не хотите писать код самостоятельно, можно воспользоваться готовыми плагинами. Вот несколько вариантов, которые помогут автоматизировать удаление записей:
- Auto Delete Posts — позволяет настроить удаление записей по типу, статусу и сроку жизни. Удобен для сайтов с разными типами контента.
- WP Bulk Delete — мощный инструмент для массового удаления записей по множеству параметров, включая категории, метки, даты и кастомные поля.
- Clearfy Pro — расширенный плагин для оптимизации сайта, в том числе имеет функции очистки базы и удаления устаревших записей.
Плагины предоставляют графический интерфейс для настройки, что упрощает задачу для пользователей без опыта программирования.
Учет безопасности и резервного копирования
При автоматическом удалении данных важно предусмотреть меры безопасности:
- Перед удалением лучше создавать резервные копии базы данных.
- Запускать удаление в нерабочее время, чтобы не создавать нагрузку на сервер и не мешать посетителям.
- Использовать функцию
wp_delete_postс параметромtrueдля полного удаления илиfalseдля перемещения в корзину, чтобы иметь возможность восстановить ошибочно удаленные записи.
Для резервного копирования подойдет плагин WP Backup или любой другой популярный инструмент бэкапов.
Как отключить задачу WP Cron при необходимости
Иногда нужно временно остановить автоматическое удаление, например, при обновлении сайта или тестировании. Для этого можно удалить запланированное событие:
function wpedu_deactivate_delete_cron() {
$timestamp = wp_next_scheduled('wpedu_daily_delete_old_posts');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpedu_daily_delete_old_posts');
}
}
// Вызывать при деактивации плагина или вручную
wpedu_deactivate_delete_cron();
Это остановит выполнение функции удаления до повторной регистрации задачи.
Выводы и рекомендации
Автоматизация удаления устаревших записей в WordPress позволяет поддерживать сайт в порядке и улучшать производительность. Для реализации можно использовать как кастомный код с WP Cron, так и готовые плагины, например, Clearfy Pro или WP Bulk Delete. Важно тщательно тестировать удаление и иметь резервные копии, чтобы избежать потерь данных.