Неиспользуемые типы записей (custom post types) могут накапливаться в базе данных WordPress, занимая место и создавая путаницу в админ-панели. Особенно актуально это для сайтов, на которых долгое время ставились и удалялись различные плагины и темы, регистрировавшие собственные CPT. В этой статье разберём, как безопасно определить и удалить такие данные, чтобы не сломать сайт и освободить ресурсы.
Что такое типы записей в WordPress и почему их нужно удалять
Типы записей — это структуры данных, которые хранят записи определённого вида, отличные от стандартных «записей» и «страниц». Например, это могут быть товары, события, портфолио, отзывы и т.д. Когда плагин или тема регистрирует CPT, в базе создаются записи с этим типом.
Если плагин удалён, но данные остались, они становятся «мусором»: они не отображаются на сайте, но занимают место и могут замедлять запросы к базе. При миграции или бэкапах лишние записи увеличивают объём данных.
Регулярная очистка таких типов записей — часть технического обслуживания сайта. Это повышает производительность и упрощает работу с базой.
Как определить неиспользуемые типы записей
1. Анализ зарегистрированных типов записей
Для начала нужно получить список всех зарегистрированных CPT на сайте. Это можно сделать с помощью функции get_post_types(). При вызове без параметров она возвращает массив всех типов, включая системные.
function wpinc_get_all_post_types() {
$post_types = get_post_types([], 'names');
return $post_types;
}
print_r(wpinc_get_all_post_types());Этот код можно поместить в файл functions.php вашей темы или использовать в плагине для отладки.
2. Сравнение с активными плагинами и темами
После получения списка нужно сопоставить типы записей с активными плагинами и темой. Если CPT не зарегистрирован ни одним из них, вероятно, он устарел.
Полезно проверить, не зависит ли от этих записей какой-то функционал. Для этого можно просмотреть документацию плагинов, код темы или использовать поиск по базе данных.
3. Поиск записей с подозрительными типами
Чтобы проверить, есть ли записи с данным типом, воспользуйтесь SQL-запросом:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'your_post_type';Замените your_post_type на интересующий тип. Если количество записей равно 0, тип можно удалить без опасений.
Если записи есть, нужно решить, хотите ли вы их сохранить или удалить.
Как безопасно удалить неиспользуемые типы записей и связанные данные
1. Резервное копирование сайта
Перед любыми изменениями настоятельно рекомендуется сделать полную резервную копию сайта и базы данных. Так вы сможете восстановить данные в случае ошибки.
2. Удаление записей нужного типа с помощью WP_Query
Чтобы массово удалить записи определённого типа из базы, можно использовать следующий код:
function wpinc_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 );
if ( $query->have_posts() ) {
foreach ( $query->posts as $post_id ) {
wp_delete_post( $post_id, true ); // true - без перемещения в корзину
}
}
}Вызовите wpinc_delete_posts_by_type('your_post_type'); с нужным типом для удаления.
3. Очистка таксономий и метаданных
После удаления записей могут остаться данные в таблицах таксономий и метаполей. Обычно функция wp_delete_post удаляет связанные метаданные, но иногда необходимо проверить вручную.
Для удаления метаданных можно использовать SQL-запросы или специальные плагины, например, Clearfy Pro, который помогает оптимизировать базу и удалять из неё ненужные данные.
Плагины и инструменты для обнаружения и удаления неиспользуемых типов записей
Для упрощения работы можно использовать готовые решения:
- WP-Optimize — плагин для очистки базы данных и оптимизации. Имеет опцию удаления неиспользуемых записей.
- Advanced Database Cleaner — расширенный инструмент для очистки базы, включая удаление orphaned метаданных и CPT.
- Clearfy Pro — комплексный оптимизатор, который не только очищает базу, но и устраняет конфликты, улучшая производительность. Подробнее на официальном сайте.
Как автоматически скрыть неиспользуемые типы записей из админ-панели
Если вы не хотите сразу удалять записи, но мешают лишние типы в меню, можно скрыть их программно:
function wpinc_hide_unused_post_types() {
global $menu;
$hidden_post_types = ['your_post_type1', 'your_post_type2'];
foreach ( $hidden_post_types as $pt ) {
remove_menu_page( 'edit.php?post_type=' . $pt );
}
}
add_action( 'admin_menu', 'wpinc_hide_unused_post_types', 999 );Этот код скроет указанные типы из меню, не удаляя их из базы.
Заключение
Удаление неиспользуемых типов записей — важный этап технического обслуживания WordPress. Подходите к этому ответственно, предварительно исследуя типы и делая бэкапы. Используйте приведённые советы и примеры кода для безопасной очистки базы. При необходимости автоматизируйте процесс с помощью плагинов, таких как Clearfy Pro.