В процессе разработки и поддержки бизнес-сайтов на WordPress часто возникает задача массового создания категорий и подкатегорий для упорядочивания контента. Особенно это актуально, если требуется импортировать большую структуру таксономий, например, при миграции с других CMS или при подготовке шаблонов для новых проектов.
Зачем нужно автоматическое создание категорий и подкатегорий в WordPress
Создавать категории вручную через админку достаточно долго и неудобно, особенно если их много. Автоматизация этого процесса экономит время и уменьшает вероятность ошибок, связанных с опечатками или неправильной иерархией.
Кроме того, автоматическое создание категорий позволяет:
- Обеспечить единообразие структуры таксономий;
- Быстро инициализировать новый сайт с предопределённой категоризацией;
- Интегрировать категориальные данные из внешних источников;
- Автоматизировать работу плагинов, которые зависят от определённых категорий.
Для бизнес-сайтов, где важна правильная организация контента и удобство навигации, это особенно полезно.
Как работает создание категорий в WordPress через код
WordPress предоставляет функцию wp_insert_term(), которая позволяет программно создавать термины — категории, метки или любые другие таксономии. С её помощью можно определить название категории, её слаг (URL-идентификатор), описание и родительскую категорию (для подкатегорий).
Пример простого создания категории:
wp_insert_term(
'Новинки', // Название категории
'category' // Таксономия
);Но если нужно создавать сразу иерархическую структуру из категорий и подкатегорий, лучше написать функцию, которая будет создавать сначала родительские категории, а затем дочерние, указывая родителя через параметр parent.
Пример функции для автоматического создания категорий и подкатегорий
Рассмотрим пример, который можно вставить в файл functions.php вашей темы или оформить в виде плагина. Функция wpbusiness_create_categories() создаёт заданную структуру категорий:
function wpbusiness_create_categories() {
// Массив с категориями и подкатегориями
$categories = [
'Продукты' => [
'Ноутбуки',
'Смартфоны',
'Аксессуары'
],
'Услуги' => [
'Ремонт',
'Консультации'
],
'Новости' => []
];
foreach ($categories as $parent_name => $children) {
// Проверяем, существует ли уже категория
$parent_term = term_exists($parent_name, 'category');
if (!$parent_term) {
$parent_term = wp_insert_term($parent_name, 'category');
if (is_wp_error($parent_term)) {
continue; // Если ошибка, пропускаем
}
}
$parent_id = is_array($parent_term) ? $parent_term['term_id'] : $parent_term;
// Создаём подкатегории
foreach ($children as $child_name) {
$child_term = term_exists($child_name, 'category');
if (!$child_term) {
wp_insert_term($child_name, 'category', ['parent' => $parent_id]);
}
}
}
}
// Пример вызова функции при активации темы
add_action('after_setup_theme', 'wpbusiness_create_categories');В этом примере мы задали три родительские категории и несколько подкатегорий. Функция проверяет, не существует ли категория с таким именем, чтобы не создавать дубликаты.
Как безопасно запускать автоматическое создание категорий
Не рекомендуется запускать функции создания категорий при каждой загрузке сайта, так как это может привести к лишним запросам и ненужным проверкам. Лучше запускать такую функцию однократно, например, при активации темы или плагина. Для этого используется хук after_setup_theme или register_activation_hook в плагинах.
Также можно добавить условие, чтобы функция запускалась только при определённых условиях или вручную через админку, например, через AJAX или создание специальной страницы с кнопкой.
Практические советы и оптимизация
Если количество категорий и подкатегорий очень большое (сотни или тысячи), лучше формировать структуру в виде массива или JSON и обрабатывать частями, чтобы избежать превышения лимитов PHP и нагрузки на сервер.
Для бизнес-сайтов с большим объёмом контента рекомендуем использовать плагины для управления таксономиями и импортом, например, Clearfy Pro, который помогает оптимизировать работу с таксономиями и удалить избыточные категории.
Если нужно создавать категории с дополнительными метаданными или особым функционалом, можно расширять функцию, используя add_term_meta() для добавления метаданных к категориям сразу после их создания.
Пример расширенной функции с добавлением метаданных к категориям
function wpbusiness_create_categories_with_meta() {
$categories = [
[
'name' => 'Продукты',
'description' => 'Все товары нашего магазина',
'children' => [
['name' => 'Ноутбуки', 'description' => 'Различные модели ноутбуков'],
['name' => 'Смартфоны', 'description' => 'Смартфоны разных брендов'],
]
],
[
'name' => 'Блог',
'description' => 'Новости и статьи',
'children' => []
]
];
foreach ($categories as $cat) {
$parent_term = term_exists($cat['name'], 'category');
if (!$parent_term) {
$parent_term = wp_insert_term($cat['name'], 'category', ['description' => $cat['description']]);
if (is_wp_error($parent_term)) continue;
}
$parent_id = is_array($parent_term) ? $parent_term['term_id'] : $parent_term;
// Добавляем метаданные к родительской категории
add_term_meta($parent_id, 'custom_description', $cat['description'], true);
foreach ($cat['children'] as $child) {
$child_term = term_exists($child['name'], 'category');
if (!$child_term) {
$child_term = wp_insert_term($child['name'], 'category', [
'parent' => $parent_id,
'description' => $child['description']
]);
if (!is_wp_error($child_term)) {
$child_id = $child_term['term_id'];
add_term_meta($child_id, 'custom_description', $child['description'], true);
}
}
}
}
}
add_action('after_setup_theme', 'wpbusiness_create_categories_with_meta');В этом варианте мы добавляем описание и метаданные к каждой категории, что может пригодиться для дальнейшей кастомизации вывода.
Заключение
Автоматическое создание категорий и подкатегорий через код — мощный инструмент для разработчика WordPress, особенно на бизнес-сайтах с большой структурой контента. Используя функции WordPress, можно быстро и безопасно создавать иерархии таксономий, расширять их метаданными и интегрировать с другими элементами сайта.
Для ещё более продвинутой работы с таксономиями рекомендуем обратить внимание на плагины из WPSHOP, которые помогают оптимизировать и автоматизировать управление категориями и другими элементами сайта.