В процессе ведения сайта на WordPress может накопиться множество записей, которые по тем или иным причинам оказались пустыми — без содержимого, с минимальным или некорректным текстом. Такие записи не только мешают удобству управления контентом, но и могут негативно влиять на SEO и производительность сайта. В этой статье разберём, как автоматизировать удаление таких старых пустых записей с помощью кода и плагинов.
Почему важно удалять пустые записи в WordPress
Пустые записи — это чаще всего результат ошибок при публикации, незаконченных черновиков или импорта данных. Их удаление важно по нескольким причинам:
- Улучшение производительности: База данных становится легче, что ускоряет выборки и снижает нагрузку.
- Чистота контента: Пользователи и поисковые роботы не сталкиваются с пустыми страницами или ошибками.
- SEO-оптимизация: Пустые страницы могут восприниматься поисковыми системами как низкокачественный контент.
Обычно ручное удаление таких записей занимает много времени, особенно если их сотни. Автоматизация поможет решать эту задачу регулярно и без лишних усилий.
Как определить пустую запись: критерии и нюансы
Для автоматического удаления нужно точно понимать, что считать «пустой» записью. Обычно ориентируются на такие критерии:
- Отсутствие содержимого в поле
post_contentили очень короткий текст (например, менее 20 символов). - Отсутствие заголовка (
post_titleпустой или слишком короткий). - Статус опубликованной записи: обычно удаляем только опубликованные или опубликованные давно (например, старше 30 дней).
Некоторые записи могут содержать важные метаданные или быть нужны для других целей, поэтому стоит тщательно проверять логику, чтобы не удалить нужный контент.
Автоматизация удаления через WP Cron с примером кода
Для регулярного удаления пустых записей удобно использовать планировщик задач WordPress — WP Cron. Ниже пример, как реализовать такую задачу.
Регистрация крон-задачи
function wpbit_schedule_empty_post_cleanup() {
if (!wp_next_scheduled('wpbit_empty_post_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpbit_empty_post_cleanup_hook');
}
}
add_action('wp', 'wpbit_schedule_empty_post_cleanup');
Этот код регистрирует ежедневное выполнение задачи wpbit_empty_post_cleanup_hook.
Функция очистки пустых записей
function wpbit_delete_old_empty_posts() {
global $wpdb;
$days = 30; // Удалять записи старше 30 дней
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Получаем ID пустых постов
$posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = 'publish'
AND (LENGTH(TRIM(post_content)) < 20 OR post_content = '')
AND (post_title = '' OR LENGTH(TRIM(post_title)) < 5)
AND post_date < %s ",
$date_threshold
));
if (!empty($posts)) {
foreach ($posts as $post_id) {
wp_delete_post($post_id, true); // true — для полного удаления
}
}
}
add_action('wpbit_empty_post_cleanup_hook', 'wpbit_delete_old_empty_posts');
Данный код выбирает опубликованные записи старше 30 дней, у которых пустое или очень короткое содержимое и заголовок, и удаляет их без возможности восстановления.
Использование плагинов для удобства и расширенных настроек
Если не хочется писать код, можно воспользоваться готовыми плагинами, которые позволяют фильтровать и удалять записи по различным критериям.
WP Bulk Delete
- Позволяет массово удалять записи по статусу, типу, таксономиям, мета-полям и другим параметрам.
- Есть возможность создавать расписания для регулярного удаления.
- Можно настроить удаление пустых или коротких по длине записей.
Скачать и ознакомиться: WP Bulk Delete на wpshop.ru
Advanced Database Cleaner
- Помогает чистить базу данных от мусорных данных, в том числе пустые записи.
- Есть возможность планировать очистку через WP Cron.
- Интерфейс удобен для тех, кто не хочет писать SQL-запросы.
Подробнее: Advanced Database Cleaner
Дополнительные рекомендации по безопасности и тестированию
Перед автоматическим удалением записей стоит:
- Создать резервную копию базы данных — чтобы можно было восстановить случайно удалённые записи.
- Добавить журналирование — например, сохранять ID удалённых постов в отдельный лог-файл или таблицу.
- Тестировать на локальном или тестовом сайте с похожей базой данных, чтобы убедиться, что удаляются только нужные записи.
Пример добавления логирования в функцию удаления:
function wpbit_delete_old_empty_posts() {
global $wpdb;
$days = 30;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_status = 'publish'
AND (LENGTH(TRIM(post_content)) < 20 OR post_content = '')
AND (post_title = '' OR LENGTH(TRIM(post_title)) < 5)
AND post_date < %s ",
$date_threshold
));
if (!empty($posts)) {
foreach ($posts as $post_id) {
if (wp_delete_post($post_id, true)) {
error_log("[WPBIT] Deleted empty post ID: {$post_id}");
}
}
}
}
Заключение
Автоматизация удаления старых пустых записей в WordPress — необходимая практика для поддержания сайта в чистоте и порядке. Использование WP Cron с кастомной функцией позволяет гибко настраивать логику, а плагины дают удобный интерфейс для менее технических пользователей. Главное — подходить к задаче ответственно, делать резервные копии и тестировать изменения.