Как удалить неиспользуемые типы постов в WordPress с помощью кода

|

В процессе разработки и эксплуатации сайта на WordPress часто возникает ситуация, когда регистрируются кастомные типы записей (CPT), которые со временем перестают использоваться. Они продолжают занимать место в базе данных, могут создавать путаницу в админке и даже влиять на производительность. В этой статье подробно разберём, как безопасно удалить неиспользуемые типы постов в WordPress с помощью кода, чтобы очистить базу и интерфейс.

Почему важно удалять неиспользуемые типы постов

Типы постов в WordPress — это сущности, которые определяют структуру и отображение контента. При разработке сайтов часто создают CPT для каталогов, портфолио, отзывов и пр. Если такой тип поста больше не нужен, его удаление поможет:

Однако удалить тип поста не так просто, как кажется, потому что WordPress не предоставляет встроенных средств для удаления CPT и связанных с ним данных. Поэтому придётся делать это вручную через код и SQL-запросы.

Как определить, какие типы постов не используются

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

Получение списка всех типов постов через код

Добавьте следующий код в файл темы functions.php или в плагин для разработчика, чтобы вывести все зарегистрированные типы постов:

function yelly_get_all_post_types() {
    $post_types = get_post_types([], 'names');
    echo '<pre>';
    print_r($post_types);
    echo '</pre>';
}
add_action('admin_notices', 'yelly_get_all_post_types');

Этот код выведет массив всех типов постов, зарегистрированных на сайте. Изучив его, вы сможете определить, какие CPT устарели.

Проверка количества записей в типах постов

Для удаления неиспользуемых типов постов важно убедиться, что в них нет данных или они не нужны. Для этого можно выполнить SQL-запрос в phpMyAdmin или через WP CLI для подсчёта количества записей:

SELECT post_type, COUNT(*) AS count FROM wp_posts GROUP BY post_type;

Замените wp_ на префикс вашей базы. Так вы увидите, сколько записей есть в каждом типе.

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

Удаление типа поста состоит из двух этапов:

  1. Отменить регистрацию CPT, чтобы WordPress перестал его видеть.
  2. Удалить все записи этого типа из базы данных.

Отмена регистрации типа поста

Обычно CPT регистрируются через функцию register_post_type() в коде темы или плагине. Чтобы «удалить» тип поста, нужно перестать его регистрировать — то есть удалить или закомментировать этот код. Но если CPT зарегистрирован плагином, то деактивация плагина может помочь.

Если же CPT регистрируется динамически, и вы хотите временно скрыть его без удаления кода, можно воспользоваться хаком:

function yelly_unregister_post_type() {
    unregister_post_type('my_custom_post_type');
}
add_action('init', 'yelly_unregister_post_type', 100);

Замените my_custom_post_type на название вашего типа. Этот код отменит регистрацию CPT после стандартной и скроет его из админки.

Удаление всех записей типа поста

После отмены регистрации CPT записи остаются в базе. Их нужно удалить вручную. Для этого можно использовать SQL-запрос:

DELETE FROM wp_posts WHERE post_type = 'my_custom_post_type';

И не забудьте очистить связанные метаданные:

DELETE pm FROM wp_postmeta pm
INNER JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.post_type = 'my_custom_post_type';

Если вы хотите сделать это через код в WordPress, используйте следующий пример функции:

function yelly_delete_custom_post_type_posts($post_type) {
    $args = [
        'post_type'      => $post_type,
        'post_status'    => 'any',
        'posts_per_page' => -1,
        'fields'         => 'ids',
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        foreach ($query->posts as $post_id) {
            wp_delete_post($post_id, true); // true — без перемещения в корзину
        }
    }
}
// Вызов функции для удаления записей
// yelly_delete_custom_post_type_posts('my_custom_post_type');

Такой код удалит все записи CPT программно, что безопаснее, чем прямой SQL, особенно на больших сайтах.

Очистка таксономий и метаданных, связанных с CPT

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

Для удаления таксономий, связанных с CPT, можно использовать SQL:

DELETE FROM wp_term_relationships WHERE object_id IN (
    SELECT ID FROM wp_posts WHERE post_type = 'my_custom_post_type'
);

Или в коде через функции WordPress:

function yelly_delete_term_relationships($post_type) {
    global $wpdb;
    $post_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s",
        $post_type
    ));
    if (!empty($post_ids)) {
        foreach ($post_ids as $post_id) {
            wp_delete_object_term_relationships($post_id, 'category'); // замените 'category' на нужную таксономию
        }
    }
}

Не забудьте заменить 'category' на свои таксономии, если они есть.

Полезные плагины для управления типами постов

Если вы не хотите работать с кодом напрямую, можно использовать плагины, которые помогают управлять CPT:

Использование таких плагинов упрощает работу и снижает риск ошибок.

Резюме и рекомендации по безопасности

Удаление неиспользуемых типов постов — важный шаг для поддержания чистоты и производительности сайта. Однако перед удалением обязательно сделайте резервную копию базы данных. Проверяйте, что удаляемые данные действительно не нужны, и не удаляйте системные типы постов, такие как post, page и т.п.

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

Следуя этим рекомендациям, вы улучшите качество кода и структуру сайта на WordPress, что положительно скажется на скорости и удобстве управления контентом.

Как использовать хуки и фильтры в WordPress для изменения выводимых данных
11.12.2025
Как создать автоматические списки в WordPress с помощью PHP и JavaScript
11.03.2026
Как удалить неиспользуемые метаданные в WordPress: оптимизация базы данных
30.11.2025
Как полностью удалить загруженные файлы из медиабиблиотеки WordPress без остаточных файлов
09.05.2026
Как создать динамический каталог товаров на WordPress с фильтрами и AJAX
18.12.2025
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙