В процессе эксплуатации сайта на WordPress периодически возникает необходимость удалять устаревший контент — записи или страницы, которые неактуальны или негативно влияют на SEO и производительность сайта. В этой статье разберём, как автоматически удалять старый контент по дате публикации с помощью собственного кода, а также рассмотрим практические советы по безопасному управлению таким процессом.
Почему важно удалять старый контент в WordPress
Удаление старого контента помогает поддерживать сайт в актуальном состоянии, улучшает поведенческие факторы пользователей и снижает нагрузку на базу данных. Особенно если на сайте много новостей, обзоров или другой информации с ограниченным сроком актуальности.
Кроме того, удаление неактуального контента снижает риск появления битых ссылок и улучшает индексацию сайта поисковыми системами. Однако делать это нужно аккуратно, чтобы не потерять важные данные и не навредить SEO.
Как автоматизировать удаление записей по дате публикации
Для автоматического удаления записей или страниц старше заданного срока можно использовать планировщик задач WordPress — WP-Cron. Ниже приведён пример функции, которая удаляет все записи пост_тайпа post, опубликованные более 180 дней назад.
function wptool_auto_delete_old_posts() {
$days_old = 180; // Количество дней, после которых записи удаляются
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_old} days"));
// Получаем ID записей, подходящих под условие
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => $date_threshold,
),
),
'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 — удаление без перемещения в корзину
}
}
}
// Хук для запуска функции по расписанию
add_action('wptool_daily_cleanup', 'wptool_auto_delete_old_posts');В данном примере функция wptool_auto_delete_old_posts ищет опубликованные записи старше 180 дней и полностью удаляет их из базы данных.
Настройка расписания для автоматического запуска
Чтобы функция запускалась автоматически, необходимо зарегистрировать событие в WP-Cron. Добавим код для активации ежедневного запуска при инициализации WordPress:
function wptool_setup_cron_event() {
if (!wp_next_scheduled('wptool_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wptool_daily_cleanup');
}
}
add_action('wp', 'wptool_setup_cron_event');Этот код проверяет, запланировано ли уже событие wptool_daily_cleanup, и если нет — планирует его на ежедневный запуск.
Как удалять разные типы контента и учитывать особенности
В примере выше показано удаление записей типа post. Если на вашем сайте есть другие типы контента, например, страницы (page) или кастомные типы, их тоже можно включить в выборку.
Для этого достаточно в параметре post_type указать массив:
$args['post_type'] = array('post', 'page', 'custom_type');Будьте осторожны с удалением страниц — это может повлиять на структуру сайта. Рекомендуется сначала протестировать функцию на тестовом сайте.
Также обратите внимание на параметр wp_delete_post вторым аргументом — true означает полное удаление без перемещения в корзину. Если вы хотите иметь возможность восстанавливать записи, используйте false.
Как обезопасить процесс удаления и вести логирование
Удаление данных — это необратимый процесс. Чтобы избежать ошибок и потери важных данных, полезно добавить несколько защитных механизмов:
- Добавьте проверку на количество удаляемых записей, чтобы не удалить слишком много за один раз.
- Ведите логирование удалённых ID в отдельный файл или таблицу базы данных.
- Перед удалением создавайте резервные копии сайта — для этого можно использовать плагин Clearfy Pro, который умеет автоматизировать резервное копирование и оптимизацию.
Пример добавления логирования в файл:
function wptool_auto_delete_old_posts() {
$days_old = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_old} days"));
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => $date_threshold,
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
$log_file = WP_CONTENT_DIR . '/wptool_deleted_posts.log';
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
file_put_contents($log_file, date('Y-m-d H:i:s') . " - Deleted post ID: {$post_id}\n", FILE_APPEND);
}
}
}Лучшие плагины для автоматизации очистки контента
Если вы не хотите писать код, можно использовать плагины с похожим функционалом. Вот несколько проверенных вариантов:
- Bulk Delete — позволяет автоматически удалять записи по разным параметрам, включая дату, категории, метки и др.
- Auto Delete Posts — простой плагин для удаления постов по сроку существования.
- WP Bulk Delete — расширенный инструмент для массового удаления с гибкой настройкой условий.
Для интеграции с вашим сайтом на WordPress можно использовать плагины от WPSHOP, например, Clearfy Pro для оптимизации и безопасности сайта.
Выводы и рекомендации по автоматическому удалению старого контента
Автоматизация удаления старого контента — важный шаг к поддержанию чистоты и производительности сайта. Рекомендуется:
- Тщательно тестировать любой код или плагин на тестовом сайте перед запуском на живом ресурсе;
- Использовать резервное копирование перед массовым удалением;
- Добавлять логирование для контроля процесса;
- Планировать периодичность удаления в зависимости от специфики сайта;
- Избегать удаления страниц и материалов, которые могут быть важны для SEO или пользователей.
Соблюдение этих правил поможет безопасно и эффективно управлять контентом вашего WordPress-сайта.