Что такое таксономия и зачем она нужна?
Таксономия в WordPress – это способ классификации и группировки контента. По сути, это система организации, позволяющая связывать записи, страницы и другие типы контента по определенным признакам. Таксономии облегчают навигацию по сайту и улучшают SEO, поскольку позволяют поисковым системам лучше понимать структуру контента.
Стандартные таксономии WordPress: категории и метки
WordPress поставляется с двумя встроенными таксономиями: категории и метки. Категории предназначены для широкой тематической классификации (например, «Новости», «Статьи», «Обзоры»), а метки используются для более детального описания контента (например, «SEO», «Контент-маркетинг», «WordPress»). Категории являются иерархическими, то есть могут иметь вложенные подкатегории, в то время как метки – неиерархические.
Преимущества использования произвольных таксономий
Произвольные таксономии позволяют создавать собственные системы классификации, адаптированные к конкретным потребностям вашего сайта. Например, для сайта недвижимости можно создать таксономию «Тип недвижимости» (квартира, дом, офис), а для сайта интернет-магазина – «Производитель» или «Цвет». Использование произвольных таксономий делает структуру сайта более логичной и удобной для пользователей.
Когда следует создавать произвольную таксономию?
Создание произвольной таксономии целесообразно, если:
- Стандартных категорий и меток недостаточно для адекватной классификации контента.
- Необходимо создать специализированную систему организации контента, уникальную для вашего проекта.
- Требуется более гибкий контроль над отображением и фильтрацией контента.
Подготовка: определяем параметры таксономии
Перед тем, как приступить к кодированию, необходимо четко определить параметры будущей таксономии. Это позволит избежать ошибок и упростит процесс разработки.
Название таксономии (slug)
Slug – это уникальный идентификатор таксономии, используемый в URL и программном коде. Он должен быть написан латиницей, строчными буквами и может содержать дефисы (например, property-type).
Метки таксономии (labels): множественное и единственное число, описание
Метки используются для отображения названия таксономии в административной панели WordPress. Необходимо указать как форму единственного числа (например, «Тип недвижимости»), так и форму множественного числа (например, «Типы недвижимости»), а также описание таксономии.
Объекты, к которым будет привязана таксономия (post types)
Необходимо указать, к каким типам записей будет привязана таксономия. Например, таксономию «Тип недвижимости» можно привязать к типу записи «Недвижимость», а таксономию «Производитель» – к типу записи «Товар».
Иерархическая или неиерархическая таксономия (как категории или метки)
Определите, будет ли таксономия иерархической (как категории) или неиерархической (как метки). Иерархические таксономии позволяют создавать вложенные термины, что полезно для организации сложных структур данных.
Реализация: добавление кода в functions.php (или плагин)
Код для регистрации произвольной таксономии необходимо добавить в файл functions.php вашей темы (или в отдельный плагин). Внимание: редактирование файла functions.php может привести к проблемам на сайте, поэтому перед внесением изменений сделайте резервную копию.
Функция register_taxonomy(): подробное описание параметров
Для регистрации таксономии используется функция register_taxonomy(). Она принимает два обязательных параметра: slug таксономии и название типа записи, к которому она привязывается. Также можно передать массив с дополнительными настройками.
Пример кода для создания произвольной таксономии
<?php
/**
* Регистрирует произвольную таксономию "product_category" для типа записи "product".
*
* @return void
*/
function register_product_category_taxonomy(): void {
$labels = array(
'name' => _x( 'Категории продуктов', 'Таксономия: Общее название', 'textdomain' ),
'singular_name' => _x( 'Категория продукта', 'Таксономия: Единственное название', 'textdomain' ),
'menu_name' => __( 'Категории продуктов', 'textdomain' ),
'all_items' => __( 'Все категории', 'textdomain' ),
'parent_item' => __( 'Родительская категория', 'textdomain' ),
'parent_item_colon' => __( 'Родительская категория:', 'textdomain' ),
'new_item_name' => __( 'Новая категория', 'textdomain' ),
'add_new_item' => __( 'Добавить новую категорию', 'textdomain' ),
'edit_item' => __( 'Редактировать категорию', 'textdomain' ),
'update_item' => __( 'Обновить категорию', 'textdomain' ),
'view_item' => __( 'Просмотреть категорию', 'textdomain' ),
'separate_items_with_commas' => __( 'Разделяйте категории запятыми', 'textdomain' ),
'add_or_remove_items' => __( 'Добавить или удалить категории', 'textdomain' ),
'choose_from_most_used' => __( 'Выбрать из наиболее используемых', 'textdomain' ),
'popular_items' => __( 'Популярные категории', 'textdomain' ),
'search_items' => __( 'Поиск категорий', 'textdomain' ),
'not_found' => __( 'Не найдено', 'textdomain' ),
'no_terms' => __( 'Нет категорий', 'textdomain' ),
'items_list' => __( 'Список категорий', 'textdomain' ),
'items_list_navigation' => __( 'Навигация по списку категорий', 'textdomain' ),
);
$args = array(
'hierarchical' => true, // true - как категории, false - как метки
'labels' => $labels,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'product-category' ), // URL slug
);
register_taxonomy( 'product_category', 'product', $args );
}
add_action( 'init', 'register_product_category_taxonomy' );
Объяснение каждого параметра в коде
$labels– массив с метками для таксономии (имена, описания и т.д.).hierarchical– определяет, является ли таксономия иерархической (true) или нет (false).public– определяет, является ли таксономия общедоступной.show_ui– определяет, отображается ли таксономия в административной панели WordPress.show_admin_column– определяет, отображается ли колонка таксономии в списке записей.show_in_nav_menus– определяет, можно ли использовать таксономию в меню навигации.show_tagcloud– определяет, отображается ли таксономия в облаке тегов.rewrite– массив с настройками URL.slug– slug таксономии, используемый в URL.
Подключение функции через хук ‘init’
Функцию register_product_category_taxonomy() необходимо подключить к хуку init, чтобы она была выполнена при инициализации WordPress. Это делается с помощью функции add_action( 'init', 'register_product_category_taxonomy' );.
Настройка и использование созданной таксономии
После добавления кода и обновления страницы административной панели WordPress, вы увидите новую таксономию в меню. Теперь можно добавлять, редактировать и удалять термины таксономии.
Добавление терминов в таксономию через админ-панель WordPress
Перейдите в раздел созданной таксономии в административной панели (например, «Категории продуктов») и добавьте новые термины (например, «Смартфоны», «Ноутбуки», «Планшеты»).
Редактирование и удаление терминов
Для редактирования или удаления термина наведите на него курсор и выберите соответствующую опцию.
Отображение терминов таксономии на страницах записей (single post)
После добавления терминов к записям, они будут отображаться на страницах этих записей. Способ отображения зависит от темы оформления WordPress.
Использование таксономии в шаблонах WordPress (get_terms, wp_list_categories)
Для отображения терминов таксономии в шаблонах WordPress можно использовать функции get_terms() и wp_list_categories(). Функция get_terms() возвращает массив с информацией о терминах, а функция wp_list_categories() генерирует HTML-список с ссылками на страницы терминов.
Пример использования get_terms():
<?php
$terms = get_terms( array(
'taxonomy' => 'product_category',
'hide_empty' => false,
) );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
echo '<ul>';
foreach ( $terms as $term ) {
echo '<li><a href="' . esc_url( get_term_link( $term ) ) . '" alt="' . esc_attr( sprintf( __( 'View all post filed under %s', 'my_text_domain' ), $term->name ) ) . '">' . esc_html( $term->name ) . '</a></li>';
}
echo '</ul>';
}
?>
Продвинутые возможности и дополнительные настройки
Настройка rewrite rules для красивых URL таксономии
Параметр rewrite в функции register_taxonomy() позволяет настроить URL терминов таксономии. Например, можно изменить URL с /product_category/smartphones/ на /products/smartphones/.
Добавление произвольных полей к терминам таксономии (без плагинов)
Для добавления произвольных полей к терминам таксономии можно использовать хуки edit_term_fields и save_term.
Управление правами доступа к таксономии (capabilities)
С помощью capabilities можно ограничить доступ к таксономии для определенных ролей пользователей. Например, можно запретить редактирование терминов таксономии для пользователей с ролью «Автор».
Решение распространенных проблем и ошибок
- Таксономия не отображается в админ-панели: Убедитесь, что параметр
show_uiустановлен вtrue. - URL терминов таксономии не работают: Обновите структуру постоянных ссылок в настройках WordPress (Настройки -> Постоянные ссылки).
- При сохранении термина таксономии возникает ошибка: Проверьте код на наличие синтаксических ошибок.