Работа с таксономиями и терминами в WordPress часто сопровождается накоплением пустых категорий, меток и других терминов, которые не связаны ни с одним постом. Это создает беспорядок в админке, замедляет работу сайта и усложняет навигацию для пользователей. В этой статье разберем, как найти и удалить пустые термины таксономий программно и с помощью плагинов, а также рассмотрим примеры кода для решения этой задачи.
Что такое пустые таксономии и термины в WordPress
В WordPress таксономии — это способ группировки записей, например, категории (category), метки (post_tag) и кастомные таксономии. Термины — конкретные элементы в таксономии, например категория «Новости» или метка «Обновления».
Пустые термины — это те, у которых нет связанных с ними записей. Такие термины могут появляться после удаления постов, импорта данных или других операций. Они не несут пользы и их стоит удалить, чтобы не загромождать базу данных и интерфейс.
Почему важно удалять пустые термины
Удаление пустых терминов помогает:
- Сократить размер базы данных и улучшить производительность запросов.
- Избавиться от ненужного визуального шума в админке.
- Упростить навигацию и поиск по сайту для пользователей.
- Повысить качество SEO за счет исключения неактуальных архивов.
Несмотря на то что пустые термины не критичны для работы сайта, их регулярная очистка — хорошая практика поддержки чистоты данных.
Как найти пустые термины с помощью кода
Для начала нужно получить список терминов с нулевым количеством связанных записей. Используем функцию get_terms() с параметром 'hide_empty' => false и затем отфильтруем по count == 0.
function wpbox_get_empty_terms( $taxonomy = 'category' ) {
$terms = get_terms( [
'taxonomy' => $taxonomy,
'hide_empty' => false,
] );
$empty_terms = [];
if ( ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) {
if ( $term->count === 0 ) {
$empty_terms[] = $term;
}
}
}
return $empty_terms;
}
Эта функция возвращает массив пустых терминов для указанной таксономии. Можно использовать ее для любой таксономии, заменив параметр $taxonomy.
Удаление пустых терминов программно
Чтобы удалить найденные пустые термины, можно использовать функцию wp_delete_term(). Ниже пример функции, которая удаляет все пустые термины в заданной таксономии.
function wpbox_delete_empty_terms( $taxonomy = 'category' ) {
$empty_terms = wpbox_get_empty_terms( $taxonomy );
foreach ( $empty_terms as $term ) {
wp_delete_term( $term->term_id, $taxonomy );
}
}
Пример вызова функции:
wpbox_delete_empty_terms( 'category' );
wpbox_delete_empty_terms( 'post_tag' );
Так можно очистить категории и метки. Если у вас есть кастомные таксономии, просто передайте их имя.
Удаление пустых терминов с помощью плагинов
Если вы предпочитаете не работать с кодом, можно использовать плагины:
- Term Management Tools — расширяет стандартные возможности управления таксономиями, включая удаление пустых терминов.
- WP-Sweep — поможет очистить базу данных от мусора, включая пустые термины.
При установке и использовании плагинов всегда делайте резервную копию сайта.
Автоматизация удаления пустых терминов в WordPress
Чтобы регулярно очищать сайт от пустых терминов, можно добавить автоматическое удаление, например, через cron-задание WordPress.
function wpbox_schedule_empty_term_cleanup() {
if ( ! wp_next_scheduled( 'wpbox_cron_empty_term_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpbox_cron_empty_term_cleanup' );
}
}
add_action( 'wp', 'wpbox_schedule_empty_term_cleanup' );
add_action( 'wpbox_cron_empty_term_cleanup', function() {
$taxonomies = get_taxonomies( [], 'names' );
foreach ( $taxonomies as $taxonomy ) {
wpbox_delete_empty_terms( $taxonomy );
}
});
Этот код создает ежедневное событие, которое очищает пустые термины во всех таксономиях. Такой подход позволяет поддерживать базу данных в чистоте без ручного вмешательства.
Особенности и предостережения
Перед удалением терминов важно понимать, что:
- Удаление терминов необратимо без резервной копии.
- Пустые термины не влияют напрямую на безопасность, но влияют на производительность и удобство.
- Некоторые кастомные таксономии могут использоваться плагинами, будьте осторожны с их очисткой.
- Рекомендуется выполнять удаление в периоды низкой нагрузки на сайт.
Заключение
Удаление пустых терминов — важная часть поддержания чистоты и производительности WordPress-сайта. С помощью приведенных примеров кода и плагинов вы легко найдете и удалите ненужные термины, а автоматизация позволит делать это регулярно без ваших усилий.
Для удобства можете скачать плагин Clearfy, который среди прочего помогает оптимизировать таксономии и очистить базу от ненужных данных.