В процессе ведения сайта на WordPress со временем накапливается множество постов, которые больше не нужны — это могут быть черновики, устаревшие статьи, тестовые записи или просто забытые материалы. Их наличие влияет на производительность сайта и усложняет управление контентом. В этой статье разберём, как эффективно находить, удалять и блокировать неиспользуемые посты с помощью кода и плагинов.
Почему важно удалять и блокировать неиспользуемые посты
Неиспользуемые посты замедляют работу сайта, занимают место в базе данных и могут создавать путаницу при управлении контентом. Кроме того, если такие посты по ошибке становятся индексируемыми, это негативно скажется на SEO. Поэтому важно регулярно проводить чистку контента и при необходимости предотвращать повторное создание нерелевантных или устаревших записей.
Удаление освобождает ресурсы, а блокировка помогает избежать появления новых нежелательных постов, например, из-за ошибок пользователей или недоработок в автоматизации.
Как найти неиспользуемые посты в WordPress
Первый шаг — определить, какие записи можно считать неиспользуемыми. Обычно это:
- Черновики, которые не обновлялись долгое время.
- Посты со статусом «Ожидает проверки», которые никто не публиковал.
- Устаревшие записи с низкой посещаемостью и без внешних ссылок.
- Тестовые посты, которые создавались для проверки функционала.
Для поиска таких постов можно использовать SQL-запросы к базе данных. Например, вот запрос, который выбирает черновики старше 90 дней:
SELECT ID, post_title, post_date FROM wp_posts WHERE post_status = 'draft' AND post_date <= DATE_SUB(NOW(), INTERVAL 90 DAY);Подобный запрос можно адаптировать для других статусов или критериев.
Использование WP_Query для поиска старых черновиков
Если хочется сделать поиск на уровне кода WordPress, удобно использовать класс WP_Query. Пример функции, которая получает черновики старше 3 месяцев:
function wpreboot_get_old_drafts() {
$args = [
'post_type' => 'post',
'post_status' => 'draft',
'date_query' => [
[
'before' => '3 months ago',
],
],
'posts_per_page' => -1,
];
$query = new WP_Query( $args );
return $query->posts;
}Эта функция вернёт массив постов, которые можно обработать дальше.
Как безопасно удалить неиспользуемые посты
Удаление постов — необратимая операция, поэтому лучше сначала переместить их в корзину, проверить результаты, а потом окончательно удалить. Сделать это можно вручную через админку или программно.
Пример удаления постов через PHP с подтверждением
Ниже пример функции, которая удаляет посты из массива по их ID, предварительно отправляя их в корзину:
function wpreboot_trash_and_delete_posts( $post_ids ) {
foreach ( $post_ids as $id ) {
// Перемещаем в корзину
wp_trash_post( $id );
}
// Можно добавить код для окончательного удаления через wp_delete_post с параметром true
}Если хотите полностью удалить без корзины, используйте wp_delete_post( $id, true ), но будьте осторожны.
Как заблокировать создание новых неиспользуемых постов
Иногда причина накопления неиспользуемого контента — неконтролируемое создание новых постов с определёнными характеристиками. Можно ограничить создание таких записей двумя способами:
- Запретить создание постов с определёнными метками, категориями или статусом.
- Автоматически удалять или помечать посты, которые соответствуют нежелательным условиям.
Фильтрация создания постов по хуку save_post
Пример функции, которая запрещает создание постов с меткой «test» и удаляет их сразу после сохранения:
function wpreboot_block_test_posts( $post_id, $post, $update ) {
if ( $update ) {
return; // Только при создании
}
$tags = wp_get_post_tags( $post_id, [ 'fields' => 'names' ] );
if ( in_array( 'test', $tags ) ) {
wp_delete_post( $post_id, true );
}
}
add_action( 'save_post', 'wpreboot_block_test_posts', 10, 3 );Такой код поможет избежать появления нежелательных записей.
Полезные плагины для управления неиспользуемыми постами
Если не хочется писать код, можно использовать плагины, упрощающие управление устаревшими и неиспользуемыми постами:
- WP Bulk Delete — мощный плагин для массового удаления постов по разным критериям, включая дату, статус и категории.
- Clearfy Pro — помогает оптимизировать и очистить базу данных, в том числе удаляя черновики и ревизии. Подробнее на wpshop.ru.
- Expert Review — можно использовать для оценки и маркировки устаревших постов перед удалением.
Резюме: как встроить этот функционал в тему или плагин
Чтобы регулярно очищать неиспользуемые посты, можно добавить в functions.php темы или в собственный плагин функцию, которая по расписанию (через WP-Cron) будет запускать поиск и удаление старых черновиков и нерелевантных записей.
Пример добавления WP-Cron для запуска функции еженедельно:
if ( ! wp_next_scheduled( 'wpreboot_weekly_cleanup' ) ) {
wp_schedule_event( time(), 'weekly', 'wpreboot_weekly_cleanup' );
}
add_action( 'wpreboot_weekly_cleanup', 'wpreboot_clean_old_drafts' );
function wpreboot_clean_old_drafts() {
$old_drafts = wpreboot_get_old_drafts();
$post_ids = wp_list_pluck( $old_drafts, 'ID' );
wpreboot_trash_and_delete_posts( $post_ids );
}Так вы автоматизируете очистку сайта и поддержите его в оптимальном состоянии без лишних усилий.