В процессе работы с WordPress иногда в базе данных накапливаются пустые записи — посты, страницы, или кастомные типы записей без контента и заголовка. Такие записи не несут смысловой нагрузки, могут замедлять работу сайта и увеличивать размер базы данных. В этой статье мы подробно рассмотрим, как эффективно находить и удалять пустые записи в WordPress, используя SQL-запросы, WP_Query и проверенные плагины, а также предоставим примеры кода для автоматизации процесса.
Что такое пустые записи и почему их стоит удалять
Пустые записи — это записи в таблице wp_posts, у которых отсутствует заголовок (post_title) и/или содержимое (post_content). Такое может происходить из-за ошибок при создании контента, неполного импорта, тестов или некорректного поведения плагинов.
Удаление таких записей снижает размер базы данных, улучшает производительность запросов и упрощает администрирование сайта.
Однако перед удалением рекомендуется сделать резервную копию базы данных, чтобы избежать потери важных данных.
Поиск пустых записей через SQL-запросы
Самый быстрый способ найти пустые записи — использовать SQL. Например, чтобы вывести пустые записи (без заголовка и контента), выполните следующий запрос в phpMyAdmin или через консоль MySQL:
SELECT ID, post_type, post_status FROM wp_posts
WHERE (post_title = '' OR post_title IS NULL)
AND (post_content = '' OR post_content IS NULL)
AND post_status IN ('publish', 'draft', 'pending')
AND post_type NOT IN ('revision', 'nav_menu_item');
Этот запрос исключает служебные типы записей, которые не нужно трогать.
Для удаления пустых записей можно использовать запрос:
DELETE FROM wp_posts
WHERE (post_title = '' OR post_title IS NULL)
AND (post_content = '' OR post_content IS NULL)
AND post_status IN ('publish', 'draft', 'pending')
AND post_type NOT IN ('revision', 'nav_menu_item');
Важно: перед выполнением DELETE обязательно сделайте резервную копию!
Удаление пустых записей через WP_Query и PHP
Если вы хотите удалить пустые записи программно из кода на WordPress, можно использовать WP_Query для выборки и wp_delete_post() для удаления:
function wpassist_delete_empty_posts() {
$args = [
'post_type' => 'any',
'post_status' => ['publish', 'draft', 'pending'],
'posts_per_page' => -1,
'meta_query' => [],
'fields' => 'ids',
];
$query = new WP_Query($args);
foreach ($query->posts as $post_id) {
$title = get_post_field('post_title', $post_id);
$content = get_post_field('post_content', $post_id);
if (empty(trim($title)) && empty(trim($content))) {
wp_delete_post($post_id, true); // true — удалить без возможности восстановления
}
}
}
// Запуск функции при необходимости
// wpassist_delete_empty_posts();
Этот способ более гибкий, так как позволяет интегрировать удаление в плагин или тему, запускать по cron или вручную.
Использование плагинов для очистки базы данных
Если вы не хотите заниматься кодом, можно использовать плагины, которые помогают очистить базу данных от мусора, включая пустые записи:
- WP-Optimize — популярный плагин для оптимизации и очистки базы данных. Позволяет удалять ревизии, спам, черновики, а также можно вручную удалять пустые записи.
- Advanced Database Cleaner — плагин с расширенными возможностями по выявлению и удалению ненужных данных, включая пустые посты и страницы.
- Clearfy Pro — среди функций есть очистка базы от мусора и оптимизация. Полезен для комплексной работы с сайтом WordPress.
Перед использованием плагинов также рекомендуется создавать резервные копии.
Автоматизация удаления пустых записей с помощью WP-Cron
Для регулярного удаления пустых записей можно создать задачу WP-Cron, которая будет запускать функцию очистки периодически.
function wpassist_schedule_empty_post_cleanup() {
if (!wp_next_scheduled('wpassist_empty_post_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpassist_empty_post_cleanup_hook');
}
}
add_action('wp', 'wpassist_schedule_empty_post_cleanup');
add_action('wpassist_empty_post_cleanup_hook', 'wpassist_delete_empty_posts');
function wpassist_delete_empty_posts() {
$args = [
'post_type' => 'any',
'post_status' => ['publish', 'draft', 'pending'],
'posts_per_page' => -1,
'fields' => 'ids',
];
$query = new WP_Query($args);
foreach ($query->posts as $post_id) {
$title = get_post_field('post_title', $post_id);
$content = get_post_field('post_content', $post_id);
if (empty(trim($title)) && empty(trim($content))) {
wp_delete_post($post_id, true);
}
}
}
Этот код добавит ежедневную задачу, которая будет автоматически удалять пустые записи, поддерживая базу данных в порядке.
Особенности при работе с кастомными типами записей и плагинами
Если на вашем сайте используются кастомные типы записей, важно убедиться, что удаление пустых записей не затронет нужные записи с техническими целями.
Например, некоторые плагины могут создавать записи для хранения данных, у которых нет стандартного контента или заголовка. В таких случаях стоит добавить исключения по типу записи в код и SQL-запросы.
Также плагины как WPRemark или Clearfy Pro могут помочь в оптимизации базы и автоматизации очистки, включая работу с кастомными типами записей.
Рекомендации по безопасности и производительности
Перед удалением любых записей из базы данных:
- Создавайте резервные копии с помощью плагинов или хостинг-панели.
- Тестируйте запросы сначала на копии базы данных.
- Используйте транзакции, если работаете напрямую с MySQL.
- Проводите очистку в периоды низкой нагрузки на сайт.
- Мониторьте изменения в работе сайта после удаления.
Это поможет избежать потерь данных и сохранить стабильность работы WordPress.