В процессе разработки и эксплуатации сайтов на WordPress часто накапливаются неиспользуемые пользовательские типы записей (Custom Post Types, CPT). Они могут быть созданы плагинами, темами или вручную, и если их не удалять, это приводит к росту объема базы данных, снижению производительности и усложнению управления сайтом.
Что такое пользовательские постовые типы и почему важно их удалять
Пользовательские постовые типы — это расширение стандартных типов записей WordPress (посты, страницы), предназначенное для структурирования контента по нуждам проекта. Например, типы «продукты», «портфолио», «события» и так далее.
Если плагин или тема, которая их создала, была удалена или больше не используется, эти типы и их записи остаются в базе данных. Они занимают место, замедляют запросы, особенно если в базе много данных, и могут создавать проблемы при миграции или обновлении.
Удаление таких CPT и связанных с ними данных — важный шаг в оптимизации и чистке WordPress.
Как найти неиспользуемые пользовательские типы записей
Использование плагинов
Для начала стоит определить, какие CPT есть на сайте сейчас и какие из них не используются.
Плагин Custom Post Type UI позволяет просматривать все зарегистрированные постовые типы, однако не отображает, используются ли они активно.
Лучше использовать плагин WP Clean Up или WP Optimize, которые анализируют содержимое базы и показывают статистику по типам записей. Также плагин Query Monitor помогает выявлять запросы к CPT во время работы сайта.
Ручной способ через базу данных
Если удобнее, можно самостоятельно проверить таблицу wp_posts, выполнив SQL-запрос:
SELECT post_type, COUNT(*) as count FROM wp_posts GROUP BY post_type;Этот запрос покажет, какие типы записей есть и сколько записей каждого типа.
Затем нужно сопоставить их с зарегистрированными CPT в коде плагинов и тем. Если тип записей зарегистрирован, но не используется на сайте (например, нет ссылок в меню, нет контента), его стоит удалить.
Как безопасно удалить неиспользуемые CPT и их записи
Шаг 1: Резервное копирование базы данных
Перед удалением данных обязательно создайте полную резервную копию базы данных. Это позволит восстановить информацию в случае ошибок.
Шаг 2: Удаление записей из неиспользуемого типа
Для удаления всех записей определенного типа можно воспользоваться SQL-запросом:
DELETE FROM wp_posts WHERE post_type = 'имя_типа';Однако этот способ удалит только записи, но не связанные метаданные и таксономии.
Для полного удаления лучше использовать WP-функции или специализированные плагины.
Шаг 3: Удаление метаданных и таксономий
Записи имеют связанные метаданные в таблице wp_postmeta и таксономии в wp_term_relationships. Их удаление можно автоматизировать с помощью PHP-кода.
Пример кода для удаления CPT и связанных данных
Ниже пример функции, которая удаляет все записи определенного типа и очищает метаданные и таксономии. Вставьте этот код в файл functions.php вашей темы или в отдельный плагин для однократного запуска.
function wpclean_delete_cpt_and_meta($post_type) {
global $wpdb;
// Получаем все ID постов указанного типа
$post_ids = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = %s",
$post_type
));
if (empty($post_ids)) {
return;
}
// Формируем список ID для запроса
$ids_placeholder = implode(',', array_map('absint', $post_ids));
// Удаляем метаданные
$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id IN ($ids_placeholder)");
// Удаляем связи таксономий
$wpdb->query("DELETE FROM {$wpdb->term_relationships} WHERE object_id IN ($ids_placeholder)");
// Удаляем сами записи
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE ID IN ($ids_placeholder)");
// Кэш очищаем
foreach ($post_ids as $post_id) {
clean_post_cache($post_id);
}
}
// Пример вызова функции:
// wpclean_delete_cpt_and_meta('your_custom_post_type');Замените your_custom_post_type на имя типа, который хотите удалить.
Плагины для управления и удаления CPT
Если не хочется работать с кодом, можно использовать плагины с графическим интерфейсом:
- WP Bulk Delete — позволяет массово удалять посты по типу, статусу, таксономиям и другим параметрам.
- Custom Post Type UI — для управления и удаления регистрации CPT, однако записи остаются, их надо удалять отдельно.
- Advanced Database Cleaner — помогает находить и удалять устаревшие данные, включая неиспользуемые посты.
Использование таких инструментов значительно упрощает очистку сайта от неиспользуемого контента и оптимизирует работу базы данных.
Как предотвратить накопление неиспользуемых CPT в будущем
Чтобы не сталкиваться с проблемой накопления неиспользуемых пользовательских типов записей, рекомендуется:
- Перед установкой плагинов внимательно изучать, какие CPT они создают и нужны ли они.
- При удалении плагина искать и удалять связанные с ним данные вручную или с помощью плагинов очистки.
- Использовать функционал WordPress для временной деактивации CPT и проверки, не ломается ли сайт, перед окончательным удалением.
- Периодически проводить аудит базы данных и проверять наличие устаревших данных.
Таким образом, регулярная чистка базы и внимательное отношение к CPT поможет поддерживать сайт быстрым и удобным для администрирования.