wpinc.ru wordpress WP Inc

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

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

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

Пользовательские типы записей — это расширения стандартных записей WordPress, позволяющие создавать уникальные структуры контента, например, «Кейсы», «Отзывы», «Портфолио» и так далее. После удаления плагина или темы, которые их зарегистрировали, CPT часто остаются, а данные в базе не удаляются автоматически.

Основные проблемы неиспользуемых CPT:

  • Засорение базы данных — неиспользуемые записи занимают место и замедляют запросы.
  • Проблемы с админкой — в меню могут появляться лишние разделы и записи.
  • Потенциальные конфликты с новыми плагинами или темами.

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

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

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

Использование SQL-запроса

Выполните в phpMyAdmin или через WP-CLI следующий запрос для поиска всех типов записей и количества записей в каждом:

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

Это покажет все типы записей, включая стандартные (post, page) и пользовательские.

Плагины для анализа CPT

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

Удаление неиспользуемых типов записей: пошаговая инструкция

1. Резервное копирование

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

2. Деактивация плагина или темы с CPT

Если CPT зарегистрирован плагином или темой, сначала деактивируйте их. После этого CPT исчезнут из админки, но записи останутся в базе.

3. Удаление записей конкретного CPT через код

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

function wpinc_delete_cpt_posts($post_type) {
    $args = [
        'post_type' => $post_type,
        'posts_per_page' => -1,
        'post_status' => 'any',
        'fields' => 'ids'
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        foreach ($query->posts as $post_id) {
            wp_delete_post($post_id, true); // true — удалить без возможности восстановления
        }
    }
}

// Используйте функцию, указывая CPT, например:
// wpinc_delete_cpt_posts('portfolio');

Обратите внимание, что удаление происходит без возможности восстановления, поэтому убедитесь в необходимости удаления.

4. Очистка связанных таблиц и мета-данных

Записи CPT могут иметь мета-поля, термины таксономий и другие связанные данные. WordPress обычно удаляет их вместе с постом, но иногда остаются остаточные данные.

Для дополнительной очистки можно использовать плагин Clearfy Pro, который умеет удалять мусор, в том числе от удалённых CPT.

Удаление CPT из кода

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

function wpinc_unregister_cpt() {
    unregister_post_type('portfolio');
}
add_action('init', 'wpinc_unregister_cpt', 100);

Однако будьте осторожны: WordPress не рекомендует динамически удалять CPT, лучше полностью убрать код регистрации.

Альтернативные методы и рекомендации

Использование WP-CLI для удаления записей

WP-CLI позволяет быстро удалить записи CPT из командной строки:

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

Это один из самых быстрых и эффективных способов.

Проверка и удаление таксономий

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

function wpinc_delete_taxonomy_terms($taxonomy) {
    $terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);
    if (!empty($terms) && !is_wp_error($terms)) {
        foreach ($terms as $term) {
            wp_delete_term($term->term_id, $taxonomy);
        }
    }
}

// Пример:
// wpinc_delete_taxonomy_terms('portfolio_category');

Удаление мета-данных напрямую из базы

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

DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON pm.post_id = wp.ID WHERE wp.ID IS NULL;

Этот запрос удалит все мета-данные, не привязанные к существующим записям.

Как избежать накопления неиспользуемых CPT в будущем

Чтобы не сталкиваться с подобными проблемами, рекомендуем придерживаться нескольких правил:

  • Удалять плагин и удалять данные при деактивации, если это предусмотрено.
  • Использовать плагины с функцией полной деинсталляции.
  • Проводить регулярный аудит CPT и базы данных.
  • Использовать Clearfy Pro для автоматической очистки мусора и оптимизации.

Такой подход поможет сохранять сайт быстрым и чистым.

×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙