Как эффективно удалить пустые записи в базе данных WordPress

Пустые записи (посты, страницы, кастомные типы записей) в базе данных 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 или плагинов. Не забывайте о резервном копировании и тестировании, а также применяйте валидацию данных при создании новых записей.

Скачать WP с оф. сайта Магазин проверенных платных тем