Неиспользуемые таксономии в WordPress со временем накапливаются и могут замедлять работу сайта, а также усложнять управление контентом. В этой статье разберём, как обнаружить такие таксономии, безопасно их удалить и предотвратить повторное появление. Вы получите практические советы и примеры кода, которые помогут оптимизировать вашу WordPress-систему.
Что такое таксономии в WordPress и зачем их удалять
Таксономии — это способ группировки записей, страниц, пользовательских типов записей и других объектов в WordPress. Помимо стандартных категорий и меток, могут быть созданы кастомные таксономии плагинами или темами. Иногда после удаления плагинов или изменения структуры сайта остаются неиспользуемые таксономии, которые не нужны, но продолжают занимать место в базе данных и интерфейсе.
Удаление таких таксономий помогает:
- Оптимизировать базу данных, уменьшить её размер и ускорить запросы.
- Избавиться от путаницы в админке и интерфейсе сайта.
- Повысить безопасность, исключив ненужные точки входа.
Важно удалять таксономии аккуратно, чтобы не потерять нужные данные.
Как найти неиспользуемые таксономии в WordPress
Для начала нужно получить список всех зарегистрированных таксономий и проверить, используются ли они на сайте. Вот пример функции, которая выводит все таксономии и количество связанных с ними объектов:
function wpupgrade_list_taxonomies_usage() {
$taxonomies = get_taxonomies([], 'objects');
foreach ($taxonomies as $taxonomy) {
$count = wp_count_terms($taxonomy->name);
echo 'Таксономия: ' . esc_html($taxonomy->name) . ' - Количество терминов: ' . intval($count) . '<br>';
}
}
wpupgrade_list_taxonomies_usage();
Эта функция поможет выявить таксономии с нулевым количеством терминов. Однако, нулевое количество терминов не всегда значит, что таксономия не нужна — например, она может быть зарезервирована для будущего использования или автоматически создавать термины.
Для более точного анализа полезно проверить, используются ли эти таксономии на сторонах фронтенда и в админке, а также есть ли записи, к которым они применяются.
Удаление таксономий: что нужно знать
WordPress не предоставляет штатного способа полностью удалить таксономию через интерфейс. Это связано с тем, что таксономии регистрируются в коде, и их удаление требует удаления кода или отключения плагинов, которые их создают.
Однако можно удалить записи терминов и очистить связанные метаданные из базы данных. Для этого используйте функции и SQL-запросы с осторожностью.
Удаление терминов таксономии через PHP
Пример кода для удаления всех терминов заданной таксономии:
function wpupgrade_delete_taxonomy_terms($taxonomy) {
$terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
]);
if (is_wp_error($terms)) {
return;
}
foreach ($terms as $term) {
wp_delete_term($term->term_id, $taxonomy);
}
}
// Использование
wpupgrade_delete_taxonomy_terms('custom_taxonomy_slug');
Этот код удалит все термины из таксономии, но саму таксономию нужно отключить в коде темы или плагина.
Удаление таксономии из базы данных
Если таксономия уже не зарегистрирована, но остались данные в базе, можно очистить таблицы вручную (через phpMyAdmin или WPDB). Например, удалить все термины и связи с таксономией:
DELETE tt, tr, t
FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships tr ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.taxonomy = 'custom_taxonomy_slug';
Обязательно сделайте резервную копию базы перед такими действиями.
Как предотвратить появление ненужных таксономий в будущем
Чтобы не создавать лишние таксономии или не оставлять после себя «мусор», придерживайтесь следующих рекомендаций:
- Удаляйте или отключайте плагины и темы, которые регистрируют кастомные таксономии, если они больше не нужны.
- Проверяйте код на предмет регистрации таксономий через
register_taxonomy. - Используйте плагин Clearfy Pro для оптимизации и очистки базы данных, включая таксономии (подробнее).
- Автоматизируйте проверку и отчистку данных с помощью собственных скриптов и задач WP-Cron.
Автоматизация удаления неиспользуемых таксономий с WPUpgrade
Можно реализовать автоматическую проверку и удаление неиспользуемых терминов таксономий с помощью кастомной функции и WP-Cron. Пример:
function wpupgrade_cleanup_unused_taxonomies() {
$taxonomies = get_taxonomies([], 'names');
foreach ($taxonomies as $taxonomy) {
$count = wp_count_terms($taxonomy);
if ($count === 0) {
wpupgrade_delete_taxonomy_terms($taxonomy);
}
}
}
if (!wp_next_scheduled('wpupgrade_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpupgrade_cleanup_hook');
}
add_action('wpupgrade_cleanup_hook', 'wpupgrade_cleanup_unused_taxonomies');
Этот код ежедневно проверяет таксономии и удаляет пустые термины. При необходимости расширьте логику, чтобы отключать регистрацию таксономий в коде.