При разработке плагинов WordPress очень часто возникает необходимость разделять контент на логические категории. Для этого используется механизм таксономий (taxonomies). Они позволяют группировать записи (в том числе кастомные типы записей, созданные через register_post_type) по различным признакам — например, по типу, местоположению или тематике.
В этой статье разберём, как правильно зарегистрировать собственные таксономии при помощи функции register_taxonomy(), и организовать код плагина так, чтобы он был расширяемым и структурированным.
Что такое таксономия в WordPress
Таксономия — это способ классификации контента. В стандартной установке WordPress уже есть две таксономии:
- categories — древовидная структура (родитель → потомок);
- tags — недревовидная структура (просто список меток).
Для кастомных типов записей можно создавать собственные таксономии, например:
- property_type — тип недвижимости (дом, квартира, таунхаус и т. д.);
- location — географическое расположение (страна, город и т. д.).
Регистрация Custom Taxonomy
Регистрация выполняется функцией:
register_taxonomy( $taxonomy, $object_type, $args );
$taxonomy— уникальное имя таксономии (например,location);$object_type— тип записи, к которому она привязывается (property);$args— массив параметров и настроек.
Пример регистрации таксономии Location для кастомного типа Property:
register_taxonomy(
'location',
'property',
[
'hierarchical' => true,
'show_ui' => true,
'show_in_rest' => true,
'rewrite' => [
'slug' => 'properties/location',
],
'labels' => [
'name' => __( 'Locations', 'my-plugin' ),
'singular_name' => __( 'Location', 'my-plugin' ),
'search_items' => __( 'Search Locations', 'my-plugin' ),
'all_items' => __( 'All Locations', 'my-plugin' ),
'parent_item' => __( 'Parent Location', 'my-plugin' ),
'edit_item' => __( 'Edit Location', 'my-plugin' ),
'update_item' => __( 'Update Location', 'my-plugin' ),
'add_new_item' => __( 'Add New Location', 'my-plugin' ),
'menu_name' => __( 'Locations', 'my-plugin' ),
],
]
);
Важные параметры:
hierarchical— включает древовидную структуру (как у категорий).
Например, “Россия” → “Москва”.show_ui— отображает интерфейс управления в админке.show_in_rest— включает поддержку Gutenberg и REST API.rewrite— управляет URL-структурой.labels— задаёт переводы и названия для админки.
После регистрации таксономия появится в боковом меню рядом с вашим кастомным типом записи.
Регистрация нескольких таксономий
Аналогично можно зарегистрировать вторую таксономию — Property Type:
register_taxonomy(
'property_type',
'property',
[
'hierarchical' => false,
'show_ui' => true,
'show_in_rest' => true,
'rewrite' => [
'slug' => 'properties/type',
],
'labels' => [
'name' => __( 'Property Types', 'my-plugin' ),
'singular_name' => __( 'Property Type', 'my-plugin' ),
'add_new_item' => __( 'Add New Type', 'my-plugin' ),
'menu_name' => __( 'Types', 'my-plugin' ),
],
]
);
Теперь в админке вы сможете классифицировать каждый объект недвижимости не только по географическому признаку, но и по типу (дом, квартира, комната и т.д.).
Организация кода плагина
Когда код плагина начинает расти, важно разделить логику по файлам и классам.
Создайте в папке плагина директорию /inc, а внутри неё файл:
inc/class-property-custom-post-type.php
И определите класс для регистрации Custom Post Type и таксономий:
if ( ! class_exists( 'Property_Custom_Post_Type' ) ) {
class Property_Custom_Post_Type {
public function __construct() {
add_action( 'init', [ $this, 'register_post_type' ] );
add_action( 'init', [ $this, 'register_taxonomies' ] );
}
public function register_post_type() {
// регистрация кастомного типа property
}
public function register_taxonomies() {
$this->register_location_taxonomy();
$this->register_type_taxonomy();
}
private function register_location_taxonomy() {
register_taxonomy( /* ... */ );
}
private function register_type_taxonomy() {
register_taxonomy( /* ... */ );
}
}
new Property_Custom_Post_Type();
}
Подключение класса
В корневом файле плагина подключите класс:
define( 'MY_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
require_once MY_PLUGIN_PATH . 'inc/class-property-custom-post-type.php';
Такой подход позволяет хранить весь код, связанный с кастомными типами и таксономиями, в одном месте — что делает плагин легко поддерживаемым и масштабируемым.
Проверка в админке
После активации плагина вы увидите:
- Раздел Properties в меню админки;
- Подразделы Locations и Types, где можно добавлять иерархические термины.
Теперь при создании записи “Property” вы сможете выбирать:
- город и страну из “Locations”;
- тип недвижимости из “Types”.
Советы по работе с таксономиями
- Не используйте зарезервированные слова.
Например,type,category,tag— уже заняты WordPress. - Используйте префиксы.
Например,property_typeвместоtype. - Добавляйте переводы.
Используйте функции__()и_x()для интернационализации. - Поддерживайте REST API.
Это пригодится, если вы используете Gutenberg или Headless WordPress. - Группируйте код по классам и файлам.
Это упростит дальнейшее развитие плагина.
Заключение
Регистрация кастомных таксономий через register_taxonomy() — это мощный инструмент для структурирования контента в WordPress. Он позволяет создавать гибкие системы классификации для любых проектов — от каталога недвижимости до интернет-магазина или блога.
Создавая собственные типы записей и таксономии, вы закладываете основу для профессиональной архитектуры WordPress-плагинов и получаете контроль над структурой данных.