В процессе работы с WordPress накапливаются неиспользуемые термины таксономий, которые засоряют базу данных и могут замедлять работу сайта. Особенно это актуально, если вы часто создаёте и удаляете категории, метки, или кастомные таксономии. В этой статье мы подробно разберём, как найти и удалить такие термины без риска повредить сайт, а также рассмотрим полезные плагины и примеры кода для автоматизации процесса.
Что такое неиспользуемые термины таксономии и почему они опасны
В WordPress термин таксономии — это элемент, например, категория или метка, который связывает записи по определённому признаку. При удалении записей сами термины не всегда удаляются автоматически, если они не связаны с другими записями, они считаются неиспользуемыми.
Накопление таких терминов приводит к:
- Увеличению размера таблиц базы данных — wp_terms, wp_term_taxonomy и wp_term_relationships.
- Потенциальным ошибкам в навигации и отображении таксономий на сайте.
- Замедлению запросов, связанных с таксономиями, что влияет на производительность.
Поэтому удаление неиспользуемых терминов — важная часть оптимизации и поддержки WordPress-сайта.
Как определить неиспользуемые термины таксономии
Для начала нужно получить список терминов, которые не привязаны ни к одной записи. В таблице wp_term_taxonomy есть поле count, которое показывает, сколько записей связано с термином. Если это значение равно нулю, термин не используется.
Пример SQL-запроса для проверки таких терминов:
SELECT t.term_id, t.name, tt.taxonomy
FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.count = 0;
Этот запрос вернёт список неиспользуемых терминов всех таксономий.
Удаление неиспользуемых терминов с помощью PHP-кода
Удалять термины можно вручную через админку, но при большом количестве это неудобно. Лучше сделать скрипт, который автоматизирует процесс. Ниже пример функции wpweb_delete_unused_terms(), которую можно добавить в файл functions.php вашей темы или создать отдельный плагин.
function wpweb_delete_unused_terms() {
global $wpdb;
// Получаем все термины с count = 0
$terms = $wpdb->get_results(
"SELECT t.term_id, tt.taxonomy FROM {$wpdb->terms} t
INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id
WHERE tt.count = 0"
);
if (!empty($terms)) {
foreach ($terms as $term) {
wp_delete_term($term->term_id, $term->taxonomy);
}
echo count($terms) . ' неиспользуемых терминов удалено.';
} else {
echo 'Неиспользуемых терминов не найдено.';
}
}
Вызовите wpweb_delete_unused_terms(); один раз, например, через отдельный PHP-файл или админский хук, чтобы очистить базу.
Важные замечания по удалению через код
- Перед удалением сделайте резервную копию базы данных, чтобы избежать потери данных.
- Функция удаляет только термины с нулевым связующим count, не трогая активные категории.
- Используйте функцию один раз и удаляйте её после, чтобы избежать случайного повторного запуска.
Использование плагинов для удаления неиспользуемых терминов
Если вы не хотите работать с кодом, есть несколько плагинов, которые помогут очистить базу:
- Term Management Tools — позволяет объединять, удалять и переименовывать термины, а также выявлять неиспользуемые.
- WP Clean Up — комплексный плагин для оптимизации базы, включая удаление неиспользуемых терминов.
- Clearfy Pro (https://wpshop.ru/plugins/clearfy-pro/?utm_source=wpweb.ru&utm_medium=article&utm_campaign=wpweb-kak-udalit-neispolzuemye-taxonomy-termy-v-wordpress) — мощный инструмент для оптимизации и очистки WordPress, включая работу с таксономиями.
Они позволяют безопасно провести очистку через интерфейс, что удобно для новичков.
Дополнительные советы по оптимизации таксономий в WordPress
Удаление неиспользуемых терминов — часть общей оптимизации. Чтобы поддерживать базу данных в порядке, рекомендуем:
- Регулярно проверять и удалять черновики и ревизии записей.
- Оптимизировать таблицы базы данных с помощью плагинов, например, Clearfy Pro.
- Избегать создания избыточных кастомных таксономий без необходимости.
- Использовать хуки WordPress для автоматического удаления терминов при удалении записей, если это уместно.
Пример использования хука для удаления терминов кастомной таксономии
function wpweb_delete_terms_on_post_delete($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 = $term->count;
if ($count <= 1) { // Если термин связан только с этим постом
wp_delete_term($term->term_id, $taxonomy);
}
}
}
}
add_action('before_delete_post', 'wpweb_delete_terms_on_post_delete');
Этот код автоматически удаляет термин, если он больше ни с чем не связан после удаления записи.