Пустые записи (посты, страницы, кастомные типы записей) в базе данных WordPress могут возникать по разным причинам: ошибки при сохранении, отмена публикации, черновики без содержимого и другие. Со временем они накапливаются и занимают место, замедляя работу сайта и увеличивая размер базы данных. В этой статье мы подробно рассмотрим, как выявить и безопасно удалить такие пустые записи, чтобы оптимизировать базу данных и повысить производительность вашего сайта.
Почему появляются пустые записи в WordPress
Пустые записи — это записи без заголовка, содержимого или с минимальным содержимым, которое фактически не несёт смысловой нагрузки. Они могут появляться в нескольких случаях:
- Пользователь начал создавать запись, но не добавил содержимое и не опубликовал её.
- Черновики, которые были созданы автоматически или вручную, но не были доработаны.
- Ошибки плагинов или тем, которые некорректно создают записи.
- Импорт данных, где часть записей оказалась пустой.
Наличие таких записей замедляет запросы к базе, увеличивает размер таблиц и затрудняет администрирование.
Как найти пустые записи в базе данных WordPress
Для начала нужно определить, какие записи считать пустыми. Обычно это записи с пустым заголовком и/или пустым содержимым. Для этого можно использовать SQL-запрос напрямую к базе данных:
SELECT ID, post_title, post_content FROM wp_posts
WHERE (post_title = '' OR post_title IS NULL)
AND (post_content = '' OR post_content IS NULL)
AND post_type = 'post'
AND post_status IN ('draft', 'auto-draft', 'pending');
Этот запрос выберет записи с пустым заголовком и содержимым среди черновиков, автосохранений и ожидающих публикации.
Если у вас есть кастомные типы записей, их тоже можно проверить, заменив post_type на нужный slug.
Удаление пустых записей безопасно через код
Удалять записи напрямую через SQL можно, но это рискованно без резервного копирования. Лучше использовать WP-функции, которые обеспечат правильное удаление и очистку связанных данных.
Ниже пример функции wporg_delete_empty_posts(), которая находит и удаляет пустые записи программно:
function wporg_delete_empty_posts() {
global $wpdb;
$post_type = 'post'; // можно изменить на нужный тип
$query = $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts}
WHERE (post_title = '' OR post_title IS NULL)
AND (post_content = '' OR post_content IS NULL)
AND post_type = %s
AND post_status IN ('draft', 'auto-draft', 'pending')",
$post_type
);
$empty_post_ids = $wpdb->get_col($query);
foreach ($empty_post_ids as $post_id) {
wp_delete_post($post_id, true); // true - удалить без возможности восстановления
}
return count($empty_post_ids);
}
Эту функцию можно вызвать из админки или через WP-CLI для очистки базы.
Автоматизация удаления пустых записей с помощью WP-Cron
Чтобы база не захламлялась, можно настроить регулярную очистку пустых записей с помощью WP-Cron. Вот пример добавления задачи:
function wporg_schedule_empty_post_cleanup() {
if (!wp_next_scheduled('wporg_empty_post_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wporg_empty_post_cleanup_hook');
}
}
add_action('wp', 'wporg_schedule_empty_post_cleanup');
add_action('wporg_empty_post_cleanup_hook', 'wporg_delete_empty_posts');
Так функция wporg_delete_empty_posts() будет запускаться ежедневно и чистить базу без вашего участия.
Использование плагинов для удаления пустых записей
Если вы не хотите писать код, можно использовать плагины, которые помогут найти и удалить пустые записи.
- WP Bulk Delete — позволяет фильтровать записи по различным параметрам, в том числе по пустому заголовку и содержимому. Можно создавать задачи удаления по расписанию.
- Advanced Database Cleaner — плагин не только удаляет пустые записи, но и оптимизирует базу данных.
Для загрузки и установки рекомендуем использовать официальный репозиторий WordPress или сайт WPSHOP с плагинами для оптимизации.
Как проверить результат и предотвратить появление пустых записей
После удаления важно проверить, что сайт работает корректно и нужные записи не удалены. Для этого:
- Проверьте админку на предмет отсутствия пустых черновиков.
- Просмотрите логи ошибок, чтобы убедиться в отсутствии проблем.
- Настройте резервное копирование перед автоматической очисткой.
Для предотвращения появления пустых записей можно:
- Использовать плагин Clearfy Pro, который оптимизирует сохранение и управление записями.
- Внедрить в тему или плагин проверку перед сохранением записи, чтобы блокировать пустые заголовки и содержимое.
Пример простого фильтра, который не позволит сохранить запись без заголовка:
function wporg_validate_post_title($data, $postarr) {
if (empty(trim($data['post_title']))) {
wp_die('Ошибка: заголовок записи не может быть пустым.');
}
return $data;
}
add_filter('wp_insert_post_data', 'wporg_validate_post_title', 10, 2);
Заключение
Удаление пустых записей — важная задача для поддержания скорости и чистоты базы данных WordPress. Используйте SQL-запросы для поиска, WP-функции для безопасного удаления и автоматизируйте процесс с помощью WP-Cron или плагинов. Не забывайте о резервном копировании и тестировании, а также применяйте валидацию данных при создании новых записей.