В процессе работы с WordPress на сайте со временем могут накапливаться неиспользуемые таксономии, которые создаются плагинами, темами или вручную. Они занимают место в базе данных и могут замедлять работу сайта, а также создавать путаницу в админке. В этой статье подробно разберем, как эффективно найти и удалить неиспользуемые таксономии в WordPress с помощью кода и плагинов.
Что такое таксономии в WordPress и почему важно их чистить
Таксономии — это способ группировки записей, страниц, продуктов и других типов контента. Стандартные таксономии — категории и метки (tags). Кроме них, плагины и темы могут создавать кастомные таксономии для удобства организации данных.
Когда таксономии перестают использоваться, например, после удаления плагина или изменения структуры сайта, они остаются в базе данных. Это может привести к:
- избыточному использованию ресурсов базы данных,
- затруднениям при администрировании,
- потенциальным ошибкам при работе с REST API и шаблонами.
Регулярное удаление неиспользуемых таксономий помогает поддерживать сайт в чистоте и повысить производительность.
Как определить неиспользуемые таксономии в WordPress
Для начала нужно получить список всех таксономий, зарегистрированных на сайте. С помощью функции get_taxonomies() можно получить полный массив таксономий, включая системные и пользовательские.
Пример вывода всех таксономий с количеством связанных записей:
function wpstuff_get_taxonomies_with_counts() {
$taxonomies = get_taxonomies([], 'objects');
foreach ($taxonomies as $taxonomy) {
$count = wp_count_terms($taxonomy->name);
echo 'Таксономия: ' . $taxonomy->name . ' — записей: ' . $count . "\n";
}
}
wpstuff_get_taxonomies_with_counts();
Если в таксономии количество записей равно нулю, то вероятно, она не используется.
Обратите внимание, что некоторые системные таксономии, например, post_tag или category, могут быть пустыми, но их удалять не стоит.
Удаление неиспользуемых таксономий с помощью кода
WordPress не предоставляет стандартного метода для удаления таксономий из базы данных, поэтому придется делать это вручную через SQL-запросы или с помощью PHP.
Основные шаги очистки:
- Удалить связи таксономий с записями из таблицы
wp_term_relationships. - Удалить сами термины из таблиц
wp_termsиwp_term_taxonomy.
Пример функции для удаления таксономии по имени (только если она не системная и не используется):
function wpstuff_delete_taxonomy($taxonomy_name) {
global $wpdb;
// Проверяем, что таксономия существует
if (!taxonomy_exists($taxonomy_name)) {
return false;
}
// Проверяем, что таксономия не системная
$system_taxonomies = ['category', 'post_tag', 'nav_menu', 'link_category', 'post_format'];
if (in_array($taxonomy_name, $system_taxonomies)) {
return false;
}
// Получаем связанные термины таксономии
$term_taxonomies = $wpdb->get_results($wpdb->prepare(
"SELECT * FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s",
$taxonomy_name
));
if (empty($term_taxonomies)) {
return false;
}
foreach ($term_taxonomies as $term_taxonomy) {
// Удаляем связи с объектами (записями)
$wpdb->delete($wpdb->term_relationships, ['term_taxonomy_id' => $term_taxonomy->term_taxonomy_id]);
// Удаляем таксономию
$wpdb->delete($wpdb->term_taxonomy, ['term_taxonomy_id' => $term_taxonomy->term_taxonomy_id]);
// Удаляем термин
$wpdb->delete($wpdb->terms, ['term_id' => $term_taxonomy->term_id]);
}
return true;
}
Эту функцию можно запускать для удаления конкретной таксономии после проверки, что она не используется.
Автоматическая очистка неиспользуемых таксономий
Чтобы упростить процесс, можно создать скрипт, который автоматически найдет таксономии без связанных записей и удалит их.
function wpstuff_cleanup_unused_taxonomies() {
$taxonomies = get_taxonomies([], 'names');
$system_taxonomies = ['category', 'post_tag', 'nav_menu', 'link_category', 'post_format'];
foreach ($taxonomies as $taxonomy) {
if (in_array($taxonomy, $system_taxonomies)) {
continue; // пропускаем системные
}
$count = wp_count_terms($taxonomy);
if ($count === 0) {
wpstuff_delete_taxonomy($taxonomy);
echo 'Таксономия ' . $taxonomy . ' удалена.<br>';
}
}
}
Этот код можно запускать вручную или привязать к крону для регулярной очистки.
Практические советы и плагины для управления таксономиями
Если вы не хотите писать код, можно использовать плагины для управления таксономиями и очистки базы данных:
- Clearfy Pro — плагин для оптимизации WordPress, который помогает удалять неиспользуемые таксономии и очищать базу данных.
- Term Management Tools — удобный бесплатный плагин для массового управления терминами и таксономиями.
При использовании плагинов всегда делайте резервное копирование базы данных.
Заключение
Удаление неиспользуемых таксономий в WordPress — важная задача для поддержания чистоты базы данных и оптимизации сайта. С помощью приведенных функций и рекомендаций вы сможете самостоятельно находить и удалять ненужные таксономии, а также автоматизировать этот процесс с помощью CRON или вспомогательных плагинов. Это поможет ускорить работу сайта и упростить администрирование.