В процессе ведения сайта на WordPress нередко накапливаются пустые категории, которые не содержат ни одной записи. Это негативно влияет на структуру сайта, ухудшает пользовательский опыт и может повлиять на SEO. В этой статье мы рассмотрим, как удалить пустые категории в WordPress без использования плагинов, используя только встроенные функции и SQL-запросы.
Почему важно удалять пустые категории в WordPress
Пустые категории не несут полезной информации для посетителей сайта. Они могут:
- Запутывать пользователей при навигации;
- Ухудшать структуру внутренней перелинковки;
- Создавать лишние URL-адреса, которые могут индексироваться поисковыми системами без контента;
- Усложнять администрирование сайта.
Удаление таких категорий помогает сделать сайт чище и удобнее для взаимодействия как пользователей, так и поисковых роботов.
Как определить пустые категории в WordPress
Пустая категория — это категория, у которой нет записей. В WordPress можно получить список всех категорий и проверить количество записей в каждой с помощью функции wp_link_ru_get_empty_categories(). Давайте напишем пользовательскую функцию для этой задачи.
function wp_link_ru_get_empty_categories() {
$args = array(
'taxonomy' => 'category',
'hide_empty' => true,
);
$non_empty_cats = get_terms($args);
$all_cats = get_terms(array('taxonomy' => 'category', 'hide_empty' => false));
$empty_cats = array();
$non_empty_ids = wp_list_pluck($non_empty_cats, 'term_id');
foreach ($all_cats as $cat) {
if (!in_array($cat->term_id, $non_empty_ids)) {
$empty_cats[] = $cat;
}
}
return $empty_cats;
}Эта функция вернёт массив объектов категорий, у которых нет записей.
Удаление пустых категорий с помощью PHP-кода
После того как мы получили список пустых категорий, можно написать функцию, которая удалит их из базы данных. Для этого используем функцию wp_delete_term(), которая корректно удаляет термин из таксономии.
function wp_link_ru_delete_empty_categories() {
$empty_cats = wp_link_ru_get_empty_categories();
foreach ($empty_cats as $cat) {
$result = wp_delete_term($cat->term_id, 'category');
if (is_wp_error($result)) {
error_log('Ошибка при удалении категории ID ' . $cat->term_id . ': ' . $result->get_error_message());
}
}
}Рекомендуется запускать эту функцию вручную, например, через файл темы functions.php или в консоли WP-CLI, чтобы избежать случайного удаления важных категорий.
Пример использования функции в шаблоне
Чтобы проверить и удалить пустые категории, можно временно добавить следующий код в файл functions.php вашей темы:
add_action('init', function() {
wp_link_ru_delete_empty_categories();
});<После первого успешного запуска код лучше удалить, чтобы не выполнять повторное удаление при каждом обращении к сайту.
Оптимизация с помощью SQL-запроса для массового удаления
Если категорий много, можно использовать прямой SQL-запрос для удаления пустых категорий. Важно делать резервную копию базы данных перед выполнением любых запросов.
global $wpdb;
$sql = "DELETE t, tt FROM {$wpdb->terms} AS t
INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
LEFT JOIN (SELECT term_taxonomy_id FROM {$wpdb->term_relationships}) AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tt.taxonomy = 'category' AND tr.term_taxonomy_id IS NULL;";
$wpdb->query($sql);<Этот запрос удалит все категории, у которых отсутствуют записи (проверяется по таблице связей term_relationships).
Пояснения к SQL-запросу
- Таблица
termsсодержит сами категории; - Таблица
term_taxonomyхранит связь терминов с таксономиями; - Таблица
term_relationshipsсвязывает записи с терминами; - LEFT JOIN с проверкой
IS NULLпозволяет найти категории без записей; - Удаление происходит из обеих таблиц —
termsиterm_taxonomy.
Полезные советы при работе с категориями в WordPress
Резервное копирование перед удалением
Перед удалением категорий всегда создавайте резервную копию базы данных. Это позволит восстановить данные в случае ошибки.
Использование плагина Clearfy Pro для управления категориями
Если вы предпочитаете визуальные инструменты, рассмотрите плагин Clearfy Pro. Этот плагин помогает оптимизировать WordPress, в том числе управлять таксономиями и удалять пустые категории через удобный интерфейс.
Автоматизация с WP-CLI
Для опытных пользователей можно автоматизировать удаление пустых категорий с помощью WP-CLI, написав кастомный скрипт, который будет вызывать функцию wp_link_ru_delete_empty_categories() или использовать SQL-запрос.
Выводы и рекомендации
Удаление пустых категорий — важный этап в поддержке чистоты и оптимизации сайта на WordPress. В статье мы рассмотрели несколько способов решения задачи без плагинов, включая написание функций на PHP и прямое использование SQL. Выбирайте подходящий для вас метод с учётом навыков и особенностей сайта. Не забывайте про резервное копирование и тестирование изменений на тестовой среде.