Пустые записи в WordPress — это записи, у которых нет содержимого, заголовка или они являются черновиками, которые уже не нужны. Со временем таких записей может накопиться достаточно много, что замедляет работу сайта и увеличивает размер базы данных. В этой статье рассмотрим, как эффективно найти и удалить пустые записи, используя SQL-запросы, WP CLI и плагины, а также создадим простой плагин для автоматизации этой задачи.
Почему важно удалять пустые записи в WordPress
Пустые записи — это мусор в базе данных, который затрудняет работу с контентом и снижает производительность сайта. Особенно это важно для крупных проектов с большим количеством контента и пользователей. Удаление таких записей помогает:
- Уменьшить размер базы данных;
- Ускорить запросы к базе и загрузку страниц;
- Сделать админ-панель чище и удобнее;
- Избежать возможных конфликтов с SEO и индексацией.
Отметим, что пустые записи могут появляться из-за ошибок при импорте, неправильной работы плагинов или пользователей, которые начали создавать запись, но не закончили.
Как найти пустые записи в базе данных WordPress с помощью SQL-запроса
Для начала полезно понять, что именно считать пустой записью. Обычно это записи, у которых:
- Пустой или NULL заголовок (
post_title); - Пустой или NULL контент (
post_content); - Статус записи —
draftилиauto-draft; - Тип записи —
post,pageили кастомный тип.
Пример запроса для поиска таких записей:
SELECT ID, post_title, post_status, post_type
FROM wp_posts
WHERE (post_title = '' OR post_title IS NULL)
AND (post_content = '' OR post_content IS NULL)
AND post_status IN ('draft', 'auto-draft')
AND post_type IN ('post', 'page');
Этот запрос покажет пустые записи, которые можно удалять. Чтобы удалить их, используйте:
DELETE FROM wp_posts
WHERE (post_title = '' OR post_title IS NULL)
AND (post_content = '' OR post_content IS NULL)
AND post_status IN ('draft', 'auto-draft')
AND post_type IN ('post', 'page');
ВАЖНО: Перед выполнением DELETE-запросов обязательно сделайте резервную копию базы данных.
Удаление пустых записей через WP CLI
WP CLI — мощный инструмент для управления WordPress из командной строки. Для удаления пустых записей можно использовать следующий скрипт на Bash:
wp post delete $(wp post list --post_type=post,page --post_status=draft,auto-draft --field=ID --format=ids) --force
Этот однострочник сначала получает ID всех записей с нужным статусом и типом, а затем удаляет их принудительно. Если нужно фильтровать именно пустые по содержимому записи, то придется написать более сложный PHP-скрипт или использовать SQL-запросы.
Создаем плагин для автоматического удаления пустых записей в WordPress
Чтобы автоматизировать процесс и запускать его из админки, можно создать простой плагин. Ниже пример минимального плагина wptem_delete_empty_posts:
<?php
/**
* Plugin Name: WPTem Delete Empty Posts
* Description: Удаляет пустые записи с пустым заголовком и контентом и статусом draft или auto-draft.
* Version: 1.0
* Author: WPTem
*/
if (!defined('ABSPATH')) {
exit;
}
function wptem_delete_empty_posts_run() {
global $wpdb;
$table = $wpdb->posts;
$sql = $wpdb->prepare(
"DELETE FROM $table WHERE (post_title = '' OR post_title IS NULL)
AND (post_content = '' OR post_content IS NULL)
AND post_status IN ('draft', 'auto-draft')
AND post_type IN ('post', 'page')"
);
$result = $wpdb->query($sql);
return $result;
}
function wptem_delete_empty_posts_admin_page() {
if (isset($_POST['wptem_delete_empty_posts'])) {
$deleted = wptem_delete_empty_posts_run();
echo '<div class="updated notice"><p>Удалено пустых записей: ' . intval($deleted) . '</p></div>';
}
?>
<div class="wrap">
<h1>Удаление пустых записей</h1>
<form method="post">
<input type="hidden" name="wptem_delete_empty_posts" value="1" />
<p><input type="submit" class="button button-primary" value="Удалить пустые записи" /></p>
</form>
</div>
<?php
}
function wptem_delete_empty_posts_admin_menu() {
add_submenu_page('tools.php', 'Удаление пустых записей', 'Удаление пустых записей', 'manage_options', 'wptem-delete-empty-posts', 'wptem_delete_empty_posts_admin_page');
}
add_action('admin_menu', 'wptem_delete_empty_posts_admin_menu');
// Можно добавить cron-задачу для автоматизации, если нужно
Данный плагин добавит в меню «Инструменты» в админке пункт, где можно одним кликом удалить пустые записи. Его можно доработать для работы с кастомными типами и статусами.
Полезные плагины для очистки базы данных и работы с записями
Если не хотите писать код, есть готовые решения:
- Clearfy Pro — позволяет оптимизировать базу, удалять мусорные записи и многое другое;
- WPRemark — мощный инструмент для работы с комментариями и записями;
- Плагин WP-Optimize — бесплатный и популярный для очистки базы;
- Бесплатные плагины для управления черновиками, например, Draft Cleanup.
Используйте эти инструменты аккуратно и всегда делайте бэкап.
Рекомендации по профилактике появления пустых записей
Чтобы минимизировать появление пустых записей, стоит:
- Ограничить автоматическое создание черновиков, например, отключить auto-draft;
- Использовать пользовательские уведомления, предупреждающие о публикации пустых записей;
- Проверять работу плагинов, которые создают записи автоматически;
- Регулярно чистить базу данных, используя WP CLI или плагины.
Например, чтобы отключить авто-сохранение пустых черновиков, можно добавить код в functions.php темы:
function wptem_disable_autosave_empty_post( $post_id ) {
$post = get_post( $post_id );
if ( empty( $post->post_title ) && empty( $post->post_content ) ) {
wp_delete_post( $post_id, true );
}
}
add_action( 'autosave_post', 'wptem_disable_autosave_empty_post' );
Выводы и советы
Удаление пустых записей — важная часть технической поддержки WordPress-сайта. Используйте SQL-запросы для точечной работы, WP CLI для быстрой массовой очистки и собственные плагины для удобства и автоматизации. Не забывайте про резервные копии и тестирование изменений на тестовом сайте.
Для более глубокой оптимизации базы рекомендуем обратить внимание на Clearfy Pro — это удобный инструмент с большим набором функций для очистки и ускорения WordPress.