В процессе работы с 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
- Post Types Order — позволяет видеть и управлять CPT.
- Custom Post Type UI — удобен для просмотра и управления 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 для автоматической очистки мусора и оптимизации.
Такой подход поможет сохранять сайт быстрым и чистым.