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

В процессе работы с WordPress на сайте могут накапливаться неиспользуемые типы записей (post types). Это связано с установкой и удалением плагинов, тем, а также с экспериментами и тестированием. Ненужные типы записей занимают место в базе данных, замедляют запросы и могут создавать путаницу при работе с контентом. В этой статье подробно разберем, как обнаружить и безопасно удалить неиспользуемые пользовательские типы записей и их записи из базы данных WordPress.

Что такое пользовательские типы записей и почему они остаются в базе

WordPress из коробки поддерживает несколько стандартных типов записей: post (записи), page (страницы), attachment (медиафайлы), revision и др. Многие плагины и темы добавляют собственные типы записей для своих нужд — например, portfolio, product, faq и др.

При удалении плагина или темы, которая регистрировала тип записи, сам тип перестает отображаться в админке, но записи этого типа часто остаются в таблице wp_posts. Они не видны в стандартном интерфейсе, но загружаются в базе, занимая место и замедляя работу сайта.

Удалять эти данные нужно аккуратно, чтобы не затронуть важный контент и избежать ошибок.

Как определить неиспользуемые типы записей на сайте

Первый шаг — список всех типов записей, которые есть в базе, и тех, которые сейчас зарегистрированы на сайте.

Чтобы получить список всех типов записей, зарегистрированных в WordPress, можно использовать функцию get_post_types():

function wptricks_get_registered_post_types() {
    return get_post_types([], 'names');
}

print_r(wptricks_get_registered_post_types());

Для получения списка всех типов записей, которые есть в базе (даже тех, которые не зарегистрированы сейчас), используем прямой SQL-запрос:

global $wpdb;

$post_types_in_db = $wpdb->get_col("SELECT DISTINCT post_type FROM {$wpdb->posts}");
print_r($post_types_in_db);

Сравниваем два массива — те типы, которые есть в базе и те, что зарегистрированы сейчас. Типы, которые есть в базе, но не зарегистрированы в WordPress, и есть неиспользуемые или «заброшенные».

Удаление записей неиспользуемых типов — пошагово

Перед удалением настоятельно рекомендуем сделать резервную копию базы данных. Любая ошибка может привести к потере данных.

Для удаления можно использовать SQL-запросы напрямую или написать PHP-функцию с использованием WP_Query и функции wp_delete_post(). Второй способ безопаснее, так как запускает все хуки и удаляет связанные метаданные.

Удаление через WP_Query и wp_delete_post()

Пример функции удаления всех записей определенного типа:

function wptricks_delete_posts_by_type($post_type) {
    $args = [
        'post_type'      => $post_type,
        'posts_per_page' => -1,
        'post_status'    => 'any',
        'fields'         => 'ids',
    ];

    $query = new WP_Query($args);
    foreach ($query->posts as $post_id) {
        wp_delete_post($post_id, true); // true — удалять без возможности восстановления
    }
}
<

Вызываем функцию с нужным типом:

wptricks_delete_posts_by_type('old_custom_type');

Этот способ полностью удалит записи, а также связанные метаданные и прикрепленные файлы, если они есть.

Удаление напрямую через SQL

Если записей очень много и нужно очистить быстро, можно использовать SQL-запрос, но учтите, что метаданные и привязки не удалятся автоматически.

DELETE FROM wp_posts WHERE post_type = 'old_custom_type';
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;
<

После этого можно очистить таблицы метаданных, которые не связаны с существующими записями.

Автоматизация удаления через WP-CLI

Если у вас есть доступ к WP-CLI, это удобный инструмент для массового удаления записей. Команда:

wp post delete $(wp post list --post_type='old_custom_type' --format=ids) --force

Удалит все записи типа old_custom_type без подтверждения и отправит их на окончательное удаление.

Удаление неиспользуемых типов записей и оптимизация базы

После удаления записей желательно оптимизировать базу данных, чтобы освободить место и улучшить производительность:

OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_postmeta;

Можно сделать это через phpMyAdmin или запустить запросы через WP-CLI или любой клиент MySQL.

Пример использования плагина Clearfy для очистки базы

Для тех, кто не хочет заниматься удалением вручную, подходит плагин Clearfy. Он умеет автоматически чистить базу от мусорных данных, в том числе удалять записи неиспользуемых типов.

Clearfy позволяет настроить расписание очистки, что удобно для поддержания базы в порядке без постоянного вмешательства.

Выводы и рекомендации

Удаление неиспользуемых типов записей и их данных — важная задача для поддержания чистоты и быстродействия сайта на WordPress. Рекомендуется регулярно проверять базу и удалять «заброшенные» записи, особенно после удаления плагинов или тем.

Используйте WP_Query и wp_delete_post() для безопасного удаления, или WP-CLI для быстрой массовой очистки. Не забывайте делать резервные копии и оптимизировать базу после очистки.

Если хотите автоматизировать процесс, присмотритесь к плагину Clearfy, который решит большинство проблем с мусорными данными в базе.

Оптимизация загрузки CSS в WordPress: ускоряем работу сайта
18.11.2025
Как создать собственные шорткоды в WordPress
05.11.2025
Как добавить meta robots tag в WordPress для контроля индексации страниц
22.02.2026
WooCommerce: автоматическое продление статусов заказов по статусу оплаты
31.05.2026
WooCommerce: автоматическое возврат средств и смена статуса заказа через код
18.06.2026