В процессе создания сложных иерархий страниц, категорий или пользовательских таксономий в WordPress нередко возникает проблема пустых разделов — узлов и веток иерархии, которые не содержат контента (постов, страниц или вложенных элементов). Такое пустое разделение ухудшает навигацию, может влиять на SEO и портит пользовательский опыт. В этой статье мы подробно разберём, как автоматически или вручную выявлять и удалять пустые разделы в иерархии WordPress с помощью кода и плагинов.
Почему появляются пустые разделения в иерархии WordPress
Пустые разделы — это часто категории, страницы или таксономии, у которых нет дочерних элементов или контента. Основные причины их появления:
- Удаление дочерних элементов без удаления родителя.
- Создание структуры с планами на будущее, но без наполнения.
- Автоматические импорты или миграции, создающие пустые узлы.
Например, категория «Новости» может остаться пустой, если все записи из неё удалены, но сама категория не удалена. Это приводит к ситуации, когда меню или виджеты показывают бесполезный пункт.
Как найти пустые разделы в иерархии WordPress
Для начала полезно понять, какие разделы пустые. Для этого можно использовать SQL-запросы или PHP-код, которые проверят количество записей внутри таксономий или наличие дочерних элементов.
Пример PHP-функции для проверки пустоты категории
function wphierarchy_is_term_empty($term_id, $taxonomy = 'category') {
$count = get_term($term_id, $taxonomy)->count;
return ($count == 0);
}Эта функция возвращает true, если у категории (или другой таксономии) нет записей.
Проверка пустоты страницы (наличие дочерних страниц)
function wphierarchy_is_page_empty($page_id) {
$children = get_pages(array('child_of' => $page_id));
return empty($children);
}Если функция возвращает true, значит у страницы нет дочерних страниц, то есть она потенциально пустая, если сама не содержит контент.
Автоматическое удаление пустых разделов с помощью кода
Чтобы упростить управление иерархиями, можно написать функцию, которая будет рекурсивно проходить по узлам и удалять пустые разделы. Рассмотрим пример для категорий.
function wphierarchy_delete_empty_categories() {
$categories = get_categories(array('hide_empty' => false));
foreach ($categories as $cat) {
if ($cat->count == 0) {
wp_delete_category($cat->term_id);
}
}
}Эта функция удалит все категории без записей. Для более сложных иерархий можно добавить проверку дочерних элементов и рекурсию.
Рекурсивное удаление пустых категорий с учётом дочерних
function wphierarchy_recursive_delete_empty_categories($parent = 0) {
$args = array(
'hide_empty' => false,
'parent' => $parent,
);
$categories = get_categories($args);
foreach ($categories as $cat) {
wphierarchy_recursive_delete_empty_categories($cat->term_id);
$term = get_term($cat->term_id);
if ($term->count == 0) {
wp_delete_category($cat->term_id);
}
}
}<Вы можете вызвать wphierarchy_recursive_delete_empty_categories(); для очистки всей иерархии категорий.
Удаление пустых страниц и разделов в иерархии страниц WordPress
Страницы в WordPress могут иметь дочерние страницы, образуя иерархию. Для удаления пустых страниц (без контента и без дочерних страниц) используйте такой код:
function wphierarchy_delete_empty_pages() {
$pages = get_pages();
foreach ($pages as $page) {
$has_children = get_pages(array('child_of' => $page->ID));
$content_empty = empty(trim(strip_tags($page->post_content)));
if (!$has_children && $content_empty) {
wp_delete_post($page->ID, true);
}
}
}Этот скрипт удалит страницы, которые не содержат контента и не имеют дочерних страниц, то есть полностью пустые разделы.
Плагины для упрощения управления иерархиями и очистки пустых разделов
Если вы не хотите писать код, можно использовать плагины, которые помогают управлять таксономиями и страницами:
- Term Management Tools — облегчает управление категориями и таксономиями, включая объединение и удаление.
- Bulk Delete — позволяет массово удалять посты, страницы и термины по различным условиям, включая пустоту.
- WP Sweep — чистит мусор, удаляет неиспользуемые таксономии и оптимизирует базу данных.
Для интеграции с плагинами WPGPT или WPRemark на https://wpshop.ru/ можно настроить автоматизацию очистки иерархий по расписанию, используя REST API и хуки. Подробнее об этих инструментах — на странице WPGPT.
Практические советы по работе с иерархиями без пустых разделов
Чтобы поддерживать иерархии чистыми и логичными, придерживайтесь следующих рекомендаций:
- Регулярно проверяйте и удаляйте пустые категории и страницы.
- Используйте кастомные поля для меток, чтобы помечать разделы, которые временно пустые, чтобы не удалять их случайно.
- Автоматизируйте задачи с помощью WP Cron и собственных функций, описанных выше.
- Всегда делайте резервные копии перед массовым удалением данных.
Например, можно добавить вызов функции очистки в хук активации плагина или темы:
register_activation_hook(__FILE__, 'wphierarchy_recursive_delete_empty_categories');Заключение
Удаление пустых разделений в иерархиях WordPress — важная задача для поддержания чистоты сайта и удобства навигации. С помощью приведённых функций и плагинов вы сможете эффективно находить и удалять пустые категории, страницы и таксономии, избегая путаницы и улучшая работу сайта. При необходимости автоматизируйте процесс с помощью хуков и REST API.