Работа с таксономиями в WordPress — одна из важных задач для поддержания чистоты и производительности сайта. Со временем в базе данных могут накапливаться таксономии, которые не используются ни в одном из постов. Это приводит к лишнему весу и замедлению запросов. В этой статье рассмотрим, как найти и удалить неиспользуемые таксономии в WordPress, а также приведём практические примеры кода для автоматизации процесса.
Что такое таксономии в WordPress и зачем их удалять
Таксономии — это способ группировки контента: категории, метки и любые пользовательские таксономии. В процессе разработки сайта или при использовании плагинов часто добавляются новые таксономии, которые потом перестают использоваться. Они остаются в базе данных, занимая место и создавая лишние запросы, что снижает скорость сайта, особенно при большом объёме данных.
Удаление неиспользуемых таксономий помогает:
- Сократить размер базы данных;
- Улучшить производительность запросов;
- Избавиться от путаницы в админке;
- Сделать структуру сайта понятнее для редакторов.
Как определить неиспользуемые таксономии в WordPress
Первый шаг — понять, какие таксономии не используются. Для этого можно выполнить SQL-запрос к базе данных или написать специальный PHP-скрипт.
Таксономия считается неиспользуемой, если у неё нет связанных терминов или если связанные термины не привязаны ни к одному посту.
Пример SQL-запроса для поиска таксономий без терминов
SELECT taxonomy FROM wp_term_taxonomy WHERE count = 0;Этот запрос покажет таксономии, у которых нет связанных записей. Однако следует быть осторожным с системными таксономиями, такими как category и post_tag.
PHP-скрипт для проверки использования таксономий
function wpstuff_check_unused_taxonomies() {
$taxonomies = get_taxonomies([], 'objects');
$unused = [];
foreach ($taxonomies as $taxonomy) {
if ($taxonomy->name === 'category' || $taxonomy->name === 'post_tag') {
continue; // пропускаем системные таксономии
}
$terms = get_terms(['taxonomy' => $taxonomy->name, 'hide_empty' => false]);
$used = false;
foreach ($terms as $term) {
if ($term->count > 0) {
$used = true;
break;
}
}
if (!$used) {
$unused[] = $taxonomy->name;
}
}
return $unused;
}Функция wpstuff_check_unused_taxonomies возвращает массив неиспользуемых таксономий, пропуская стандартные категории и метки.
Как удалить неиспользуемые таксономии
Удаление таксономии — это снятие её регистрации и удаление связанных данных из базы. В WordPress нет встроенной функции для полного удаления таксономии, поэтому придётся сделать это вручную через код и SQL.
1. Удаляем регистрацию таксономии
Для пользовательских таксономий нужно убрать код, который регистрирует таксономию, чаще всего это register_taxonomy в functions.php или плагинах. Если это невозможно, можно временно отключить регистрацию, чтобы таксономия не отображалась.
2. Удаляем термины и связи из базы
Для удаления данных используйте SQL-запросы. Внимание: перед работой с базой обязательно сделайте резервную копию!
DELETE tt, tr, t
FROM wp_terms t
LEFT JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tt.taxonomy = 'название_таксономии';Этот запрос удалит все термины, таксономии и связи для указанной таксономии.
3. Пример функции для удаления таксономии в WordPress с помощью PHP
function wpstuff_delete_taxonomy_data($taxonomy) {
global $wpdb;
// Получаем term_taxonomy_id для таксономии
$term_taxonomies = $wpdb->get_col($wpdb->prepare(
"SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s",
$taxonomy
));
if (empty($term_taxonomies)) {
return false; // Таксономия не найдена
}
// Удаляем связи с постами
foreach ($term_taxonomies as $tt_id) {
$wpdb->delete($wpdb->term_relationships, ['term_taxonomy_id' => $tt_id]);
}
// Удаляем таксономии
$wpdb->delete($wpdb->term_taxonomy, ['taxonomy' => $taxonomy]);
// Удаляем термины, которые больше не имеют связей
$wpdb->query(
"DELETE t FROM {$wpdb->terms} t LEFT JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id WHERE tt.term_id IS NULL"
);
return true;
}Эта функция удалит все данные по таксономии, указанной в аргументе. Используйте её с осторожностью.
Автоматизация удаления неиспользуемых таксономий
Для удобства можно написать консольную команду WP-CLI или скрипт, который будет регулярно проверять и удалять неиспользуемые таксономии.
Пример простой команды WP-CLI:
if (class_exists('WP_CLI')) {
WP_CLI::add_command('wpstuff clean-taxonomies', function() {
$unused = wpstuff_check_unused_taxonomies();
if (empty($unused)) {
WP_CLI::success('Неиспользуемые таксономии не найдены.');
return;
}
foreach ($unused as $taxonomy) {
wpstuff_delete_taxonomy_data($taxonomy);
WP_CLI::log("Таксономия {$taxonomy} удалена.");
}
WP_CLI::success('Очистка завершена.');
});
}Такой подход позволяет разработчику запускать очистку баз данных без захода в админку и вручную.
Какие плагины помогут с управлением таксономиями
Если не хочется писать код, можно использовать плагины для управления таксономиями:
- Clearfy Pro — плагин для оптимизации и очистки WordPress, включая удаление мусорных таксономий;
- WPRemark — помогает управлять комментариями, но также имеет инструменты для таксономий;
- TaxoPress — бесплатный плагин для управления таксономиями и тегами.
Используйте плагины, если не уверены в работе с базой данных напрямую.
Советы по безопасности и резервному копированию
Перед любыми изменениями в базе данных обязательно делайте резервную копию с помощью плагинов (например, UpdraftPlus) или средствами хостинга. Ошибки при удалении таксономий могут привести к потере важных данных или нарушению работы сайта.
Также рекомендуем тестировать удаление на копии сайта, чтобы убедиться, что все работает корректно.