С течением времени на сайте WordPress накапливается большое количество устаревших записей, страниц и других типов контента, которые могут негативно влиять на производительность, SEO и удобство администрирования. В этой статье мы подробно рассмотрим, как автоматически удалять старый контент, используя как кастомный код, так и готовые плагины.
Зачем удалять старый контент в WordPress
Удаление старых записей помогает:
- Уменьшить размер базы данных, ускоряя работу сайта.
- Избавиться от устаревшей или нерелевантной информации.
- Поддерживать актуальность контента для посетителей.
- Избежать проблем с SEO, связанных с дублированным или некачественным контентом.
Однако часто удаление контента вручную — трудоемкий и рискованный процесс, особенно на крупных сайтах. Автоматизация этого процесса с помощью кода или плагинов значительно упрощает задачу.
Удаление старых записей с помощью пользовательского кода
Для автоматического удаления записей, которые старше определенного периода, можно использовать WP-Cron — встроенную систему планировщика задач WordPress. Ниже пример функции, которая удаляет записи старше 180 дней:
function wp_shablon_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '180 days ago',
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'nopaging' => true,
);
$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( 'wp_shablon_daily_old_post_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wp_shablon_daily_old_post_cleanup' );
}
// Подключаем функцию к событию
add_action( 'wp_shablon_daily_old_post_cleanup', 'wp_shablon_delete_old_posts' );В этом коде создается ежедневное событие, которое запускает функцию удаления записей старше 180 дней. Обратите внимание, что wp_delete_post с параметром true удаляет записи без перемещения в корзину.
Для удаления других типов записей (страницы, кастомные типы) достаточно указать нужный post_type в параметрах.
Как отключить планировщик и очистить расписания
Если потребуется остановить автоматическое удаление, можно снять расписание так:
function wp_shablon_clear_scheduled_event() {
$timestamp = wp_next_scheduled( 'wp_shablon_daily_old_post_cleanup' );
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'wp_shablon_daily_old_post_cleanup' );
}
}Вызовите эту функцию при деактивации плагина или темы.
Использование плагинов для автоматического удаления контента
Если вы не хотите писать код, есть несколько плагинов, которые позволяют автоматически удалять устаревший контент с гибкими настройками:
- Auto Delete Posts — позволяет настроить удаление постов по дате, категории, статусу и другим параметрам.
- WP Bulk Delete — мощный инструмент для массового удаления записей, поддерживает автоматическое удаление по расписанию.
- Cleanup Scheduler — плагин для автоматической очистки базы данных и удаления старых записей.
Например, с помощью WP Bulk Delete можно настроить критерии удаления прямо в админке и включить автоматический запуск по расписанию.
Настройка WP Bulk Delete для удаления старых записей
После установки и активации плагина перейдите в раздел Bulk Delete > Delete Posts. Выберите:
- Тип записей: посты, страницы, кастомные типы.
- Условие удаления: например, дата публикации до определенного срока.
- Настройте расписание для автоматического запуска.
Плагин позволяет исключать определенные категории, теги и статусы, что удобно для точечного удаления.
Практические советы и рекомендации
Резервное копирование перед удалением
Удаление контента — необратимый процесс. Обязательно делайте бэкап базы данных перед настройкой автоматического удаления. Для этого можно использовать плагины резервного копирования, например, Backup WP или стандартные инструменты хостинга.
Тестирование на тестовом сайте
Перед запуском скриптов на живом сайте протестируйте их на копии сайта, чтобы убедиться, что удаляются только нужные записи и не повреждается структура.
Логирование удалений
Для контроля работы функции полезно вести лог удаленных записей. Добавьте в функцию код записи в отдельный файл:
function wp_shablon_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '180 days ago',
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'nopaging' => true,
);
$old_posts = get_posts($args);
if ( !empty($old_posts) ) {
foreach ( $old_posts as $post_id ) {
wp_delete_post($post_id, true);
error_log( "Deleted post ID: $post_id on " . date('Y-m-d H:i:s') );
}
}
}Логи будут сохраняться в файл debug.log при включенном WP_DEBUG_LOG.
Удаление старого контента из кастомных типов и таксономий
Если на сайте используются кастомные типы записей, например, product или event, можно адаптировать функцию:
function wp_shablon_delete_old_custom_posts() {
$args = array(
'date_query' => array(
array(
'column' => 'post_date',
'before' => '365 days ago',
),
),
'post_type' => array('product', 'event'),
'post_status' => 'publish',
'fields' => 'ids',
'nopaging' => true,
);
$old_posts = get_posts($args);
if ( !empty($old_posts) ) {
foreach ( $old_posts as $post_id ) {
wp_delete_post($post_id, true);
}
}
}Это позволит чистить не только стандартные записи, но и любой другой контент.
Заключение
Автоматическое удаление старого контента в WordPress — эффективный способ поддерживать сайт в актуальном состоянии и оптимизировать его работу. Выбор между написанием собственного кода и использованием плагинов зависит от ваших навыков и требований к гибкости. В любом случае, соблюдайте осторожность, обязательно делайте резервные копии и тщательно тестируйте решения.