В WordPress со временем в базе данных накапливаются термины таксономий (категорий, меток и пользовательских таксономий), которые не привязаны ни к одному посту. Такие термины могут замедлять работу сайта и усложнять администрирование. В этой статье мы подробно разберём, как найти и удалить неиспользуемые термины таксономий с помощью кода и плагинов.
Почему важно удалять неиспользуемые термины таксономий
Каждый термин таксономии занимает место в базе данных, а при большом количестве таких терминов происходит разрастание таблиц wp_terms и wp_term_taxonomy. Это влияет на скорость выполнения запросов, особенно если вы используете сложные фильтры и сортировки. Кроме того, в админке появляется лишний шум — список терминов становится громоздким, что усложняет навигацию и управление.
Регулярное удаление неиспользуемых терминов помогает:
- Оптимизировать базу данных и ускорить запросы;
- Облегчить администрирование таксономий;
- Повысить качество SEO за счёт более релевантных меток и категорий.
Как найти неиспользуемые термины таксономий в WordPress
Неиспользуемый термин — это термин, у которого count в таблице wp_term_taxonomy равен 0, то есть он не связан ни с одним объектом (записью, страницей и т.д.). Можно найти такие термины с помощью SQL-запроса:
SELECT t.term_id, t.name, tt.taxonomy, tt.count FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.count = 0;Этот запрос вернёт список всех терминов с нулевым счётом использования. Можно выполнить его через phpMyAdmin или любой другой инструмент управления базой данных.
Поиск неиспользуемых терминов через PHP-код
Для автоматизации задачи можно использовать WP-функции:
function wpbloger_get_unused_terms( $taxonomy = 'category' ) {
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
));
$unused = array();
foreach ( $terms as $term ) {
if ( $term->count === 0 ) {
$unused[] = $term;
}
}
return $unused;
}Данная функция возвращает массив терминов выбранной таксономии, у которых нет связанных записей.
Как удалить неиспользуемые термины таксономий программно
После того как мы получили список неиспользуемых терминов, их можно удалить с помощью функции wp_delete_term(). Ниже пример кода, который удаляет все неиспользуемые термины в указанной таксономии:
function wpbloger_delete_unused_terms( $taxonomy = 'category' ) {
$unused_terms = wpbloger_get_unused_terms( $taxonomy );
foreach ( $unused_terms as $term ) {
wp_delete_term( $term->term_id, $taxonomy );
}
}
// Использование:
wpbloger_delete_unused_terms( 'post_tag' ); // удалит неиспользуемые метки
wpbloger_delete_unused_terms( 'category' ); // удалит неиспользуемые категорииРекомендуется запускать такой код один раз, например, через плагин Code Snippets или в functions.php дочерней темы, а после выполнения удалять, чтобы не было случайного удаления терминов.
Плагины для управления и удаления неиспользуемых терминов
Если вы не хотите работать с кодом, можно использовать плагины:
- Term Management Tools — позволяет сливать и удалять термины таксономий, в том числе неиспользуемые.
- WP Sweep — оптимизирует базу данных, удаляет ревизии, спам, а также неиспользуемые термины.
- Clearfy Pro (от WPSHOP) — набор инструментов для оптимизации сайта, включает удаление мусора в базе данных, в том числе неиспользуемых терминов.
Плагины удобны для регулярного использования и безопасны, так как содержат логи действий и возможность восстановления.
Пример использования Clearfy Pro
В Clearfy Pro достаточно перейти в раздел оптимизации базы данных и выбрать пункт для удаления неиспользуемых терминов таксономий. Плагин автоматически найдёт и предложит удалить такие термины с минимальным риском.
Как избежать появления неиспользуемых терминов в будущем
Иногда неиспользуемые термины появляются из-за неудачного автоматического импорта или некорректного удаления записей. Чтобы минимизировать их появление:
- Используйте проверенные плагины импорта и экспорта с настройками по удалению неиспользуемых терминов.
- Перед удалением записей проверяйте привязанные термины и удаляйте их вместе с записями, если они больше не нужны.
- Регулярно запускайте оптимизацию базы данных с удалением мусора.
Если вы разрабатываете собственные решения, добавляйте в код функцию, которая при удалении записи проверяет и чистит связанные термины при необходимости.
Пример кода для автоматического удаления термина при удалении последнего связанного поста (wpbloger)
function wpbloger_delete_term_if_unused( $post_id ) {
$taxonomies = get_object_taxonomies( get_post_type( $post_id ) );
foreach ( $taxonomies as $taxonomy ) {
$terms = wp_get_post_terms( $post_id, $taxonomy );
foreach ( $terms as $term ) {
$count = intval( $term->count );
if ( $count <= 1 ) { // текущий пост последний с этим термином
wp_delete_term( $term->term_id, $taxonomy );
}
}
}
}
add_action( 'before_delete_post', 'wpbloger_delete_term_if_unused' );Этот хук проверит все термины, связанные с удаляемым постом, и если термин становится неиспользуемым, удалит его. Такой подход помогает автоматически поддерживать базу в чистоте.