В процессе развития сайта на WordPress часто появляются таксономии — категории, метки и пользовательские таксономии — которые со временем перестают использоваться. Наличие таких «мертвых» элементов может замедлять работу сайта, усложнять администрирование и приводить к избыточности в базе данных. В этой статье мы подробно разберём, как найти и удалить неиспользуемые таксономии с помощью кода и плагинов, чтобы оптимизировать ваш WordPress-сайт.
Что такое таксономии в WordPress и почему важно их оптимизировать
Таксономии — это способ группировки записей и других типов контента. Стандартные таксономии — это категории и метки, но также можно создавать пользовательские таксономии для более гибкой структуры контента. Со временем таксономии могут перестать использоваться: например, если вы удалили посты, относящиеся к определённой категории, или если пользовательские таксономии были созданы для теста и больше не нужны.
Неиспользуемые таксономии создают лишнюю нагрузку:
- Засоряют админ-панель, усложняя навигацию.
- Создают лишние записи в базе данных — таблицах
wp_terms,wp_term_taxonomyиwp_term_relationships. - Могут негативно влиять на SEO, если таксономии доступны в индексе поисковиков и содержат пустые страницы.
Поэтому регулярная проверка и очистка таксономий — важная часть поддержки WordPress.
Как найти неиспользуемые таксономии в WordPress
Для начала нужно определить, какие таксономии не содержат связанных записей. Можно это сделать через базу данных или программно.
Поиск через SQL-запрос
В базе данных WordPress таксономии хранятся в таблицах wp_terms и wp_term_taxonomy. Чтобы найти таксономии без связанных записей, используйте следующий запрос:
SELECT t.term_id, t.name, tt.taxonomy, tt.count
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
WHERE tt.count = 0 AND tt.taxonomy NOT IN ('post_tag', 'category')
ORDER BY tt.taxonomy, t.name;
Этот запрос покажет все таксономии с нулевым количеством связанных объектов, исключая стандартные категории и метки, так как они часто бывают пустыми временно.
Поиск с помощью кода в functions.php
Можно собрать неиспользуемые таксономии программно и вывести их в админке или логе. Вот пример функции для wpco, которая выводит список пустых таксономий:
function wpco_get_empty_taxonomies() {
$taxonomies = get_taxonomies([], 'objects');
$empty_taxonomies = [];
foreach ($taxonomies as $taxonomy) {
if ($taxonomy->public && $taxonomy->object_type) {
$terms = get_terms([
'taxonomy' => $taxonomy->name,
'hide_empty' => true,
'fields' => 'ids',
]);
if (empty($terms)) {
$empty_taxonomies[] = $taxonomy->name;
}
}
}
return $empty_taxonomies;
}
Вы можете вызвать эту функцию и вывести список пустых таксономий в админке или в лог-файле для последующего удаления.
Удаление неиспользуемых таксономий: лучшие практики
Удалять таксономии нужно аккуратно. Если это стандартные категории или метки, удаление может повлиять на структуру сайта. Пользовательские таксономии проще удалить, но обязательно сделайте бэкап перед изменениями.
Удаление пользовательских таксономий через код
В WordPress нет встроенной функции для удаления таксономии из базы — нужно удалить записи из таблиц напрямую и убрать регистрацию таксономии из кода.
Пример функции для удаления таксономии wpco_old_taxonomy:
function wpco_delete_taxonomy_data($taxonomy) {
global $wpdb;
// Получаем term_taxonomy_id для таксономии
$term_taxonomy_ids = $wpdb->get_col($wpdb->prepare(
"SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s",
$taxonomy
));
if (empty($term_taxonomy_ids)) {
return;
}
// Удаляем связи с объектами
$ids_placeholder = implode(',', array_fill(0, count($term_taxonomy_ids), '%d'));
$wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN ($ids_placeholder)",
...$term_taxonomy_ids
));
// Удаляем записи из term_taxonomy
$wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s",
$taxonomy
));
// Удаляем термины, не связанные с другими таксономиями
$wpdb->query($wpdb->prepare(
"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"
));
}
Вызовите wpco_delete_taxonomy_data('wpco_old_taxonomy'); после отключения регистрации таксономии, чтобы полностью очистить данные.
Удаление таксономий с помощью плагинов
Если вы предпочитаете GUI, используйте плагины для управления таксономиями:
- Term Management Tools — позволяет объединять и удалять термины, но не таксономии целиком.
- Clearfy Pro — расширенный плагин для оптимизации и очистки WordPress, включая управление таксономиями и удаление ненужных элементов.
Обратите внимание, что полное удаление пользовательской таксономии плагинами обычно не поддерживается, так как это связано с регистрацией на уровне кода.
Автоматизация процесса: скрипт для удаления всех пустых пользовательских таксономий
Если у вас много пользовательских таксономий и вы хотите очистить все пустые, можно использовать следующий скрипт wpco, который безопасно удалит данные таксономий без связанных записей:
function wpco_delete_all_empty_custom_taxonomies() {
$taxonomies = get_taxonomies([], 'objects');
foreach ($taxonomies as $taxonomy) {
if ($taxonomy->public && !in_array($taxonomy->name, ['category', 'post_tag'])) {
$terms = get_terms([
'taxonomy' => $taxonomy->name,
'hide_empty' => true,
'fields' => 'ids',
]);
if (empty($terms)) {
wpco_delete_taxonomy_data($taxonomy->name);
error_log("Таксономия {$taxonomy->name} была удалена как пустая.");
}
}
}
}
Запустите эту функцию один раз, например, добавив её вызов во временный снитч в functions.php, и после удаления удалите вызов.
Заключение. Важные рекомендации по работе с таксономиями
Для эффективного управления таксономиями в WordPress придерживайтесь следующих рекомендаций:
- Регулярно проверяйте таксономии на наличие пустых и устаревших.
- Перед удалением делайте полный бэкап базы данных и файлов.
- Удаляйте регистрацию пользовательских таксономий из кода, если они больше не нужны.
- Используйте специализированные плагины для оптимизации и очистки, например Clearfy Pro.
- Тестируйте изменения на тестовом сайте перед применением на боевом.
Таким образом, вы избавитесь от лишних данных, облегчите поддержку и улучшите производительность вашего сайта на WordPress.