Управление контентом — одна из ключевых задач для владельцев сайтов на WordPress. Со временем на сайте скапливается множество устаревших или неактуальных записей и страниц, которые могут замедлять работу сайта и ухудшать пользовательский опыт. В этой статье подробно рассмотрим, как сделать автоматическое удаление старого контента, например, записей старше определённого срока, с помощью кода и плагинов.
Почему важно удалять старый контент в WordPress
Удаление устаревшего контента помогает:
- Снизить нагрузку на базу данных и ускорить работу сайта;
- Поддерживать актуальность информации для посетителей;
- Упростить управление сайтом и ускорить резервное копирование;
- Избавиться от потенциальных проблем с SEO из-за дублированного или неактуального контента.
Важно понимать, что удаление — это радикальный метод, поэтому стоит подумать о других вариантах, например, архивировании или скрытии контента. Но если задача — именно удалять, то дальше расскажем, как это сделать.
Автоматизация удаления старого контента с помощью WPID_kakdelat_autodelete_content
Для реализации автоматического удаления контента в WordPress можно использовать wp-cron — встроенный механизм планировщика задач. Ниже пример функции, которая удалит все записи типа post, опубликованные более 180 дней назад.
function wpid_kakdelat_autodelete_content() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => '180 days ago',
),
),
'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 - удаление без возможности восстановления
}
}
}
// Планируем событие при активации темы или плагина
if ( ! wp_next_scheduled( 'wpid_kakdelat_daily_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpid_kakdelat_daily_cleanup' );
}
// Привязываем функцию к событию
add_action( 'wpid_kakdelat_daily_cleanup', 'wpid_kakdelat_autodelete_content' );В этом коде мы используем хук wp_schedule_event для ежедневного запуска задачи удаления записей старше 180 дней. Функция ищет подходящие записи и удаляет их полностью без возможности восстановления.
Как добавить этот код на сайт
Рекомендуется вставлять такой код в файл functions.php вашей дочерней темы или создать небольшой плагин для удобства управления и отключения.
Настройка удаления по пользовательским типам записей и статусам
Иногда нужно удалять не только записи, но и страницы или кастомные типы постов. Для этого в параметрах функции измените post_type на нужный:
page— для страниц;custom_post_type— для ваших кастомных типов;- Можно также фильтровать по статусу — например, удалять только черновики или отклонённые записи.
Пример с кастомным типом и статусом:
function wpid_kakdelat_autodelete_custom() {
$args = array(
'post_type' => 'custom_post_type',
'post_status' => array('draft', 'pending'),
'date_query' => array(
array(
'before' => '90 days ago',
),
),
'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 );
}
}
}Плагины для автоматического удаления контента
Если не хочется лезть в код, можно воспользоваться плагинами с похожим функционалом. Вот несколько проверенных вариантов:
- WP Bulk Delete — позволяет удалять записи, страницы, кастомные типы с гибкой фильтрацией по дате, категориям, таксономиям и статусам. Есть возможность автоматического запуска по расписанию.
- Auto Delete Posts — простой плагин для удаления постов старше заданного срока. Можно настроить для каждого типа постов отдельно.
- Clearfy Pro — комплексный плагин оптимизации, в числе функций есть возможность настройки автоматического удаления мусорного контента, в том числе старых записей, ревизий и черновиков. Подробнее на wpshop.ru.
Преимущество плагинов — удобный интерфейс и минимум технических знаний. Недостаток — дополнительные нагрузки и необходимость следить за обновлениями.
Рекомендации по безопасности и тестированию
Удаление контента — это необратимая операция, особенно если используется wp_delete_post( $post_id, true ) с параметром удаления без помещения в корзину. Рекомендуется:
- Перед включением автоматического удаления создать резервную копию базы данных;
- Тестировать функции на тестовом сайте;
- Добавить в функцию логирование удаляемых ID записей для контроля;
- Убедиться, что удаление не затронет важные или нужные материалы.
Пример логирования ID удалённых записей:
function wpid_kakdelat_autodelete_content_with_log() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'before' => '180 days ago',
),
),
'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 );
error_log( 'WPID: удален пост с ID ' . $post_id );
}
}
}Выводы и лучшие практики
Автоматическое удаление старого контента — эффективный способ поддерживать сайт в порядке и ускорять его работу. Важно подходить к этому осознанно, тщательно тестировать и всегда иметь резервные копии. Выбор между кодом и плагином зависит от ваших навыков и предпочтений.
Если хотите комплексное решение по оптимизации и автоматизации, рекомендуем обратить внимание на Clearfy Pro — плагин с множеством полезных функций для WordPress.