В процессе развития сайта на WordPress может накопиться множество типов записей (custom post types), которые со временем перестают использоваться. Они занимают место в базе данных, замедляют работу админки и создают путаницу. В этой статье мы подробно разберем, как можно автоматизировать процесс поиска и удаления неиспользуемых типов записей, используя код и минимальный набор плагинов.
Почему важно удалять неиспользуемые типы записей
Неиспользуемые кастомные типы записей — это мертвый груз для сайта. Вот основные причины, почему стоит от них избавляться:
- Увеличение объема базы данных — ненужные записи и их метаданные занимают место.
- Снижение производительности — WordPress загружает данные типов записей при запросах, что замедляет работу.
- Путаница в админке — лишние разделы и записи мешают сосредоточиться на актуальном контенте.
- Безопасность — устаревшие типы записей могут быть уязвимы, если их функционал больше не поддерживается.
Автоматизация удаления поможет избежать ошибок и ускорить обслуживание сайта.
Как определить неиспользуемые типы записей в WordPress
Для начала нужно понять, какие именно кастомные типы записей есть на сайте и насколько они активны. Простой способ — вывести список типов записей и количество записей в каждом.
Добавим функцию в файл functions.php вашей темы или в отдельный плагин:
function wpbox_list_post_types_usage() {
$types = get_post_types(['_builtin' => false], 'objects');
echo '<h3>Используемые кастомные типы записей</h3><ul>';
foreach ($types as $type) {
$count = wp_count_posts($type->name)->publish;
echo '<li><strong>' . esc_html($type->label) . '</strong> (' . esc_html($type->name) . '): ' . intval($count) . ' записей</li>';
}
echo '</ul>';
}
Вызовите wpbox_list_post_types_usage() на странице админки или через шаблон, чтобы увидеть список. Если у типа записей 0 записей — скорее всего, он не используется.
Автоматическое удаление записей неиспользуемых типов
Прежде чем удалять записи, рекомендую сделать резервную копию базы данных. Для автоматизации удаления можно создать функцию, которая будет искать записи заданных типов и удалять их.
Пример функции для удаления всех записей типа old_custom_type:
function wpbox_delete_posts_by_type($post_type) {
$args = [
'post_type' => $post_type,
'post_status' => 'any',
'numberposts' => -1
];
$posts = get_posts($args);
foreach ($posts as $post) {
wp_delete_post($post->ID, true); // true для принудительного удаления
}
}
Вызовите wpbox_delete_posts_by_type('old_custom_type'); для удаления всех записей этого типа.
Удаление нескольких типов за раз
Чтобы удалять сразу несколько неиспользуемых типов, можно сделать функцию с массивом:
function wpbox_delete_unused_post_types(array $types) {
foreach ($types as $type) {
wpbox_delete_posts_by_type($type);
}
}
// Пример вызова:
wpbox_delete_unused_post_types(['old_custom_type1', 'old_custom_type2']);
Удаление самих типов записей из кода
После удаления всех записей можно убрать регистрацию самих типов из кода (обычно в functions.php или плагинах). Если тип был зарегистрирован через плагин, то лучше его отключить или удалить.
Если удалить тип записи из регистрации, но записи остались в базе, они не будут отображаться в админке, но останутся в таблице wp_posts.
Использование плагинов для управления типами записей
Хотя мы ориентируемся на код, иногда удобно использовать плагины для визуального управления кастомными типами:
- Post Type Switcher — позволяет менять тип записи прямо из редактора.
- Clearfy Pro — расширенный плагин оптимизации, который может помочь выявить и оптимизировать неиспользуемые типы записей и метаданные.
Оптимизация после удаления: очистка метаданных и таксономий
Удаление записей — это только половина дела. Неиспользуемые метаданные и таксономии тоже занимают место и замедляют сайт. Для очистки метаданных можно использовать SQL-запросы или плагины оптимизации.
Пример SQL для удаления метаданных, связанных с удалёнными постами:
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;
Такой запрос удалит все метаданные, у которых нет родительского поста.
Заключение по теме
Автоматизация удаления неиспользуемых типов записей помогает поддерживать сайт в чистоте, улучшает производительность и упрощает администрирование. Используйте комбинацию кода для выявления и удаления, а также проверяйте, что вы не удаляете нужные данные. Резервное копирование — обязательный этап перед любыми массовыми операциями с базой.