В процессе разработки и поддержки сайтов на WordPress часто накапливаются неиспользуемые таксономии — категории, метки или кастомные таксономии, которые больше не нужны, но продолжают занимать место в базе данных и могут замедлять работу сайта. В этой статье я расскажу, как безопасно и эффективно удалить такие таксономии с помощью кода, без использования тяжелых плагинов.
Что такое таксономии и почему важно их удалять
Таксономии в WordPress — это способ группировки записей, страниц и других типов записей. Сюда относятся стандартные категории и метки, а также пользовательские таксономии, создаваемые через код или плагины.
Если таксономия не используется, она:
- Загромождает административную панель, создавая лишние элементы меню.
- Увеличивает размер базы данных, замедляя запросы.
- Может приводить к конфликтам или ошибкам при обновлениях и миграциях.
Поэтому регулярная чистка таксономий — важный этап поддержки сайта.
Как определить неиспользуемые таксономии
Для начала нужно понять, какие таксономии есть на сайте. Для этого можно использовать следующий код, который выводит все зарегистрированные таксономии и количество связанных с ними объектов:
function wpset_list_taxonomies_usage() {
$taxonomies = get_taxonomies([], 'objects');
echo '<pre>';
foreach ( $taxonomies as $taxonomy ) {
$count = wp_count_terms( $taxonomy->name );
echo $taxonomy->name . ' — ' . $count . " записей\n";
}
echo '</pre>';
}
add_action( 'admin_notices', 'wpset_list_taxonomies_usage' );
Этот код добавит в админке список таксономий с количеством элементов. Так вы сможете визуально определить таксономии с нулевой или минимальной активностью.
Удаление пользовательских таксономий из WordPress
Удаление таксономии — это не только удаление её регистрации, но и очистка связанных данных из базы. Самый простой способ удалить таксономию — перестать её регистрировать в коде. Но записи и связи останутся в базе и будут занимать место.
Рассмотрим поэтапно, как удалить кастомную таксономию:
1. Отменяем регистрацию таксономии
В файлах темы или плагина найдите функцию register_taxonomy и закомментируйте или удалите её вызов. Например:
// unregister_taxonomy не существует, поэтому просто не регистрируем таксономию
// register_taxonomy( 'wpset_tax', 'post', [ ... ] );
После этого таксономия перестанет отображаться в интерфейсе.
2. Удаляем связи таксономии с записями
Чтобы очистить базу, удалите все связи терминов таксономии в таблице wp_term_relationships. Это можно сделать через SQL-запрос, либо программно.
Пример кода для удаления всех терминов таксономии wpset_tax:
function wpset_delete_taxonomy_terms( $taxonomy ) {
if ( ! taxonomy_exists( $taxonomy ) ) {
return;
}
$terms = get_terms( [ 'taxonomy' => $taxonomy, 'hide_empty' => false ] );
foreach ( $terms as $term ) {
wp_delete_term( $term->term_id, $taxonomy );
}
}
// Вызов функции
wpset_delete_taxonomy_terms( 'wpset_tax' );
Этот код удалит все термины и связи из базы.
3. Опционально: удаляем записи с таксономией
Если таксономия была привязана только к определённым записям, и они больше не нужны, можно удалить и их:
function wpset_delete_posts_by_taxonomy( $taxonomy ) {
$posts = get_posts([
'tax_query' => [
[
'taxonomy' => $taxonomy,
'field' => 'term_id',
'terms' => get_terms( [ 'taxonomy' => $taxonomy, 'fields' => 'ids' ] ),
'operator' => 'IN',
],
],
'numberposts' => -1,
'post_type' => 'any',
'fields' => 'ids',
]);
foreach ( $posts as $post_id ) {
wp_delete_post( $post_id, true );
}
}
// Вызов функции
wpset_delete_posts_by_taxonomy( 'wpset_tax' );
Будьте осторожны с этим шагом, чтобы случайно не удалить важный контент.
Удаление стандартных таксономий
Иногда требуется убрать стандартные категории или метки, например, чтобы использовать только пользовательские таксономии.
Для этого можно использовать фильтр register_taxonomy_args и отменить регистрацию стандартной таксономии:
function wpset_unregister_default_taxonomy( $args, $taxonomy ) {
if ( in_array( $taxonomy, ['category', 'post_tag'] ) ) {
$args['public'] = false;
$args['show_ui'] = false;
$args['show_in_menu'] = false;
}
return $args;
}
add_filter( 'register_taxonomy_args', 'wpset_unregister_default_taxonomy', 10, 2 );
Это не удалит данные из базы, но скроет таксономию из интерфейса.
Оптимизация базы данных после удаления таксономий
После удаления терминов и связей рекомендуется оптимизировать таблицы базы данных, чтобы освободить место и ускорить работу:
- Используйте в phpMyAdmin команду
OPTIMIZE TABLE wp_terms, wp_term_taxonomy, wp_term_relationships; - Или воспользуйтесь плагином Clearfy Pro, который включает инструменты для оптимизации базы.
Регулярное обслуживание базы данных помогает поддерживать скорость и стабильность сайта.
Пример использования на практике
Допустим, у вас есть кастомная таксономия wpset_genre, которая использовалась для фильтрации фильмов, но сейчас проект изменился, и она не нужна.
- Временно отключаете регистрацию в коде.
- Запускаете функцию удаления терминов:
- Проверяете, что связи удалены, и оптимизируете базу.
- Если нужно, удаляете записи, связанные с жанрами.
wpset_delete_taxonomy_terms('wpset_genre');
Это позволит очистить сайт и базу данных от устаревшей информации, сохранив при этом стабильность.
Заключение
Удаление неиспользуемых таксономий — важный шаг в поддержке WordPress-сайта. Используя приведённые методы и код, вы сможете эффективно управлять таксономиями, избавляться от лишних данных и оптимизировать работу ресурса.
Если ищете готовые решения для оптимизации и управления таксономиями и другими аспектами сайта, обратите внимание на Clearfy Pro — мощный инструмент для оптимизации WordPress с удобным интерфейсом.