В WordPress таксономии (categories, tags и кастомные таксономии) играют ключевую роль в организации контента. Однако с течением времени на сайте могут накапливаться неиспользуемые таксономии, которые не только захламляют админку, но и могут негативно влиять на производительность и SEO. В этой статье мы подробно разберём, как найти и удалить неиспользуемые таксономии, а также рассмотрим примеры кода и полезные плагины для этой задачи.
Что такое неиспользуемые таксономии и почему их стоит удалять
Неиспользуемые таксономии — это те категории, метки или кастомные таксономии, которые не связаны ни с одним постом или другим типом записи. Они могут появиться после удаления плагинов, завершения проектов или неаккуратной работы с базой данных.
Удаление таких таксономий помогает:
- Оптимизировать базу данных, убирая лишние записи;
- Снизить нагрузку на админку, сделав интерфейс чище и удобнее;
- Улучшить SEO, так как поисковые системы не будут индексировать пустые архивы;
- Минимизировать возможные ошибки и конфликты с плагинами и темами.
Как найти неиспользуемые таксономии вручную
Для начала полезно понять, какие таксономии и их термины существуют на сайте и сколько записей с ними связано. Для этого можно использовать стандартные функции WordPress и SQL-запросы.
Использование WP CLI для поиска пустых терминов
Если у вас есть доступ к командной строке и установлен WP CLI, можно выполнить команду для вывода всех терминов с количеством связанных постов:
wp term list <taxonomy> --fields=term_id,name,count --format=table
Замените <taxonomy> на нужную таксономию, например, category или post_tag. Терманы с count равным 0 — потенциально неиспользуемые.
SQL-запрос для поиска пустых терминов
Можно выполнить такой SQL-запрос в phpMyAdmin или через любой клиент базы данных:
SELECT t.term_id, t.name, tt.taxonomy, tr.object_id
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.count = 0
AND tt.taxonomy NOT LIKE 'nav_menu'
GROUP BY t.term_id;
Этот запрос покажет все термины с нулевым количеством связанных объектов, кроме меню.
Автоматизированное удаление неиспользуемых таксономий с помощью кода
Удалять такие таксономии вручную неудобно, особенно если их много. Ниже пример функции для wpabout, которая удаляет все термины с count = 0 в указанной таксономии.
function wpabout_delete_unused_terms($taxonomy) {
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => true,
'fields' => 'ids',
));
if (empty($terms)) {
// Если нет используемых терминов, удалим все
$all_terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids',
));
foreach ($all_terms as $term_id) {
wp_delete_term($term_id, $taxonomy);
}
return count($all_terms);
}
return 0;
}
// Пример вызова:
$deleted_count = wpabout_delete_unused_terms('category');
echo "Удалено терминов: $deleted_count";
Эта функция сначала проверяет, есть ли используемые термины, и если их нет, удаляет все термины таксономии. Можно адаптировать логику для удаления только терминов с count = 0.
Использование полезных плагинов для удаления и управления таксономиями
Для тех, кто предпочитает готовые решения, существуют плагины, облегчающие поиск и удаление неиспользуемых таксономий.
- Term Management Tools — позволяет массово удалять, объединять и редактировать термины.
- Taxonomy Cleaner — специализированный плагин для удаления пустых терминов и очистки базы.
- Clearfy Pro — комплексный инструмент для оптимизации WordPress, включает функции удаления неиспользуемых таксономий и оптимизации базы данных.
Например, в Clearfy Pro есть модуль для оптимизации таксономий, который позволяет безопасно очистить базу от «мусорных» терминов одним кликом.
Особенности и меры предосторожности при удалении таксономий
Перед удалением таксономий обязательно сделайте полный бэкап базы данных и файлов сайта. Удаление терминов — операция необратимая, и ошибки могут привести к потере данных и нарушению структуры сайта.
Также учитывайте:
- Проверьте, не связаны ли термины с кастомными типами записей или плагинами, которые могут использовать таксономии;
- Не удаляйте системные таксономии WordPress без крайней необходимости;
- После удаления очистите кэш сайта и перегенерируйте постоянные ссылки (Permalinks) для корректного отображения;
- Если используете REST API, проверьте, не используются ли удаляемые таксономии в запросах.
Автоматизация удаления неиспользуемых таксономий с WP-Cron
Для сайтов с частым обновлением контента имеет смысл автоматизировать очистку таксономий. Ниже пример, как добавить wpabout-задачу, которая еженедельно удаляет пустые термины:
function wpabout_schedule_term_cleanup() {
if (!wp_next_scheduled('wpabout_weekly_term_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wpabout_weekly_term_cleanup');
}
}
add_action('wp', 'wpabout_schedule_term_cleanup');
function wpabout_weekly_term_cleanup_callback() {
$taxonomies = get_taxonomies(array(), 'names');
foreach ($taxonomies as $taxonomy) {
$terms = get_terms(array('taxonomy' => $taxonomy, 'hide_empty' => false));
foreach ($terms as $term) {
if ($term->count == 0) {
wp_delete_term($term->term_id, $taxonomy);
}
}
}
}
add_action('wpabout_weekly_term_cleanup', 'wpabout_weekly_term_cleanup_callback');
Этот код добавит еженедельное событие, которое перебирает все таксономии и удаляет пустые термины.
Итоги и рекомендации
Удаление неиспользуемых таксономий — важный шаг в поддержке чистоты и производительности WordPress-сайта. Используйте как ручные методы, так и автоматизацию, а также проверенные плагины вроде Clearfy Pro для удобства и безопасности.