В администрировании сайтов на WordPress часто накапливаются пустые категории, которые не содержат записей. Это приводит к запутанности в структуре сайта, ухудшает SEO и усложняет навигацию для пользователей. В этой статье мы рассмотрим, как удалить такие категории программно, используя собственные функции WordPress и PHP-код.
Почему важно удалять пустые категории в WordPress
Пустые категории не только захламляют панель управления, но и могут негативно влиять на SEO, так как поисковые системы видят их как неинформативные страницы. Кроме того, при создании новых записей и работе с категориями легче оперировать чистой структурой таксономий.
Удаление вручную при большом количестве категорий — трудоемкий процесс. Автоматизация решения поможет сэкономить время и избежать ошибок.
Как определить пустые категории в WordPress
Пустая категория — это категория, у которой нет записей. В WordPress для получения количества записей в категории можно использовать параметр category_count таксономии.
Для примера, можно получить все категории с помощью функции get_categories() и проверить поле count у каждой категории:
$categories = get_categories( array( 'hide_empty' => false ) );
foreach ( $categories as $category ) {
if ( $category->count == 0 ) {
// Это пустая категория
}
}Автоматическое удаление пустых категорий с помощью кода
Ниже приведен пример функции, которая удаляет все пустые категории из вашего WordPress-сайта. Функция использует стандартную функцию wp_delete_term() для удаления таксономий.
function wpbest_delete_empty_categories() {
$categories = get_categories( array( 'hide_empty' => false ) );
foreach ( $categories as $category ) {
if ( $category->count == 0 ) {
$deleted = wp_delete_term( $category->term_id, 'category' );
if ( is_wp_error( $deleted ) ) {
error_log( 'Ошибка удаления категории ID ' . $category->term_id . ': ' . $deleted->get_error_message() );
} else {
error_log( 'Категория ID ' . $category->term_id . ' успешно удалена.' );
}
}
}
}Чтобы запустить функцию, можно добавить вызов в файл functions.php вашей темы или создать отдельный плагин. Рекомендуется запускать функцию один раз, чтобы избежать постоянного удаления.
Пример вызова с условием
Например, можно добавить вызов функции при определенном GET-параметре в URL, чтобы запускать скрипт вручную из браузера:
add_action( 'admin_init', 'wpbest_delete_empty_categories_trigger' );
function wpbest_delete_empty_categories_trigger() {
if ( isset( $_GET['delete_empty_cats'] ) && current_user_can( 'manage_categories' ) ) {
wpbest_delete_empty_categories();
wp_die( 'Пустые категории удалены.' );
}
}После этого достаточно перейти по ссылке https://yoursite.ru/wp-admin/?delete_empty_cats=1 под учетной записью администратора, чтобы очистить пустые категории.
Резервное копирование и меры предосторожности
Удаление категорий — необратимая операция, поэтому перед массовым удалением рекомендуется сделать резервную копию базы данных. Можно использовать плагины резервного копирования, например, Clearfy Pro, которые обеспечивают удобное создание копий и восстановление.
Также стоит проверить, что категории действительно пустые и не используются в других местах сайта, чтобы избежать потери важного контента.
Альтернативные решения — плагины для управления категориями
Если вы не хотите использовать код, существуют плагины, которые помогают находить и удалять пустые категории. Например:
- Term Management Tools — расширяет управление таксономиями.
- Bulk Delete — позволяет массово удалять записи и категории по условиям.
Однако, программное решение дает больше гибкости и контроля, особенно если вы хотите интегрировать очистку в свои процессы.
Заключение
Удаление пустых категорий в WordPress — важный шаг в поддержании чистоты структуры сайта и оптимизации SEO. Используя приведенный код, вы можете безопасно автоматизировать этот процесс. Не забывайте делать резервные копии и тщательно проверять, какие категории удаляются.
Если хотите расширить функциональность сайта, ознакомьтесь с WPRemark для анализа комментариев и работы с таксономиями, а также Clearfy Pro для оптимизации и очистки базы данных WordPress.