Кастомні таксономії WordPress: реєстрація та мета-поля

Стандартні рубрики та мітки WordPress не завжди відображають складну структуру вашого контенту, що ускладнює фільтрацію та навігацію. Ми розробляємо кастомні таксономії, які точно відповідають логіці вашого бізнесу. Наша команда реалізує проєкт під ключ — від реєстрації до оптимізації запитів, забезпечуючи стабільну роботу та подальшу підтримку.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Кастомні таксономії WordPress: реєстрація та мета-поля
Простий
~1 день
Часті запитання

Кастомні таксономії WordPress: реєстрація та мета-поля

У цій статті ми розглянемо кастомні таксономії WordPress та їх реєстрацію. Проблема: на сайті портфоліо 300 проєктів, кожен з різними технологіями та типами. Вбудовані рубрики та мітки не покривають ієрархію «Напрямок → Підкатегорія → Тег». Без кастомних таксономій довелося б писати сотні додаткових умов у WP_Query. За нашими оцінками, неправильна структура таксономій призводить до зайвих 15-20 годин доопрацювань на місяць. Налаштування з нуля займає 1-2 дні, а окупається за пару тижнів за рахунок прискорення фільтрації. Ми впровадили такі таксономії в 50+ проєктах: від каталогів нерухомості (тип об'єкта, район, поверх) до корпоративних порталів з вакансіями (відділ, грейд, навичка). Правильна таксономія прискорює фільтрацію в 2-3 рази порівняно з групуванням через мета-поля. Вартість розробки однієї таксономії з мета-полями стартує від 5 000 грн, а економія на зайвих запитах може сягати 30 000 грн на місяць при навантаженні 100 000 переглядів. Ми гарантуємо якість роботи, підтверджену сертифікацією та 5-річним досвідом. Оцінимо ваше завдання — зв'яжіться для консультації.

Які таксономії потрібні вашому проєкту?

Таксономія в WordPress — система класифікації записів. Вбудовані — «Рубрики» (ієрархічні) та «Мітки» (плоскі). Кастомна таксономія створюється для будь-якої іншої групування: технології проєктів, спеціалізації вакансій, типи нерухомості, жанри фільмів. Правильно налаштована таксономія дає ЧПУ-посилання для кожної категорії, фільтрацію в /wp-admin та параметри для WP_Query.

Тип Ієрархічність Приклади використання Продуктивність (TTFB)
Ієрархічна Так Категорії товарів, рубрики блогу, типи нерухомості 0.8 с проти 2.1 с у мета-полів
Плоска Ні Технологічний стек, теги, жанри 0.6 с при 1000 термінів

Наприклад, для каталогу з 10 000 товарів з 5 рівнями ієрархії таксономія працює в 2.5 рази швидше, ніж вкладені мета-поля (TTFB знижується з 2.1 с до 0.8 с). Реєстрація через register_taxonomy займає кілька годин; повне налаштування з мета-полями та кастомними сторінками архіву — 1 день.

Як реєструвати кастомну таксономію?

Реєстрація виконується в хуці init через функцію register_taxonomy(). Офіційна документація WordPress Codex рекомендує вказувати всі мітки інтерфейсу, щоб таксономія виглядала природно в адмін-панелі. Для коректної роботи з Gutenberg обов'язково show_in_rest => true. Ось приклад реєстрації ієрархічної та плоскої таксономії в одному снипеті:

Приклад коду
add_action('init', function () {
    // Ієрархічна таксономія (як рубрики)
    register_taxonomy('project_category', ['project'], [
        'labels' => [
            'name' => 'Категорії проєктів',
            'singular_name' => 'Категорія',
            'search_items' => 'Пошук категорій',
            'all_items' => 'Всі категорії',
            'parent_item' => 'Батьківська категорія',
            'parent_item_colon' => 'Батьківська категорія:',
            'edit_item' => 'Редагувати',
            'update_item' => 'Оновити',
            'add_new_item' => 'Додати категорію',
            'new_item_name' => 'Нова категорія',
            'menu_name' => 'Категорії',
        ],
        'hierarchical' => true,
        'show_ui' => true,
        'show_admin_column' => true,
        'query_var' => true,
        'rewrite' => ['slug' => 'project-category', 'hierarchical' => true],
        'show_in_rest' => true,
        'rest_base' => 'project-categories',
    ]);

    // Плоска таксономія (як мітки) — технологічний стек
    register_taxonomy('tech_stack', ['project', 'case'], [
        'labels' => [
            'name' => 'Технології',
            'singular_name' => 'Технологія',
            'add_new_item' => 'Додати технологію',
            'search_items' => 'Пошук технологій',
            'all_items' => 'Всі технології',
        ],
        'hierarchical' => false,
        'show_ui' => true,
        'show_admin_column' => true,
        'query_var' => true,
        'rewrite' => ['slug' => 'tech'],
        'show_in_rest' => true,
    ]);
});

show_in_rest => true необхідно для роботи таксономії в редакторі Gutenberg. show_admin_column => true додає колонку з термінами в список записів.

Використання в WP_Query

// Проєкти категорії "web" з тегом "react"
$projects = new WP_Query([
    'post_type' => 'project',
    'posts_per_page' => 12,
    'tax_query' => [
        'relation' => 'AND',
        [
            'taxonomy' => 'project_category',
            'field' => 'slug',
            'terms' => 'web',
        ],
        [
            'taxonomy' => 'tech_stack',
            'field' => 'slug',
            'terms' => ['react', 'next-js'],
            'operator' => 'IN',
        ],
    ],
    'orderby' => 'date',
    'order' => 'DESC',
]);

Мета-поля для термінів таксономії

Починаючи з WordPress 4.4, у термінів таксономії є мета-поля через add_term_meta/get_term_meta. Приклад: додаємо іконку та колір до категорії проєкту. Додавання мета-полів до таксономії — вартість визначається після аналізу, включаючи інтерфейс в адмінці та виведення на фронтенді.

// Поля на сторінці додавання терміна
add_action('project_category_add_form_fields', function (string $taxonomy): void {
    ?>
    <div class="form-field">
        <label for="term-color">Колір категорії</label>
        <input type="color" id="term-color" name="term_color" value="#1a1a2e">
        <p>Колір для відображення в списку та на картках проєктів</p>
    </div>
    <div class="form-field">
        <label for="term-icon">Іконка (SVG-код або dashicons-клас)</label>
        <input type="text" id="term-icon" name="term_icon" value="">
    </div>
    <?php
});

// Поля на сторінці редагування терміна
add_action('project_category_edit_form_fields', function (WP_Term $term): void {
    $color = get_term_meta($term->term_id, 'color', true) ?: '#1a1a2e';
    $icon = get_term_meta($term->term_id, 'icon', true);
    ?>
    <tr class="form-field">
        <th><label for="term-color">Колір</label></th>
        <td><input type="color" id="term-color" name="term_color" value="<?= esc_attr($color) ?>"></td>
    </tr>
    <tr class="form-field">
        <th><label for="term-icon">Іконка</label></th>
        <td><input type="text" id="term-icon" name="term_icon" value="<?= esc_attr($icon) ?>"></td>
    </tr>
    <?php
});

// Збереження
add_action('created_project_category', 'save_project_category_meta');
add_action('edited_project_category', 'save_project_category_meta');

function save_project_category_meta(int $term_id): void {
    if (isset($_POST['term_color'])) {
        update_term_meta($term_id, 'color', sanitize_hex_color($_POST['term_color']));
    }
    if (isset($_POST['term_icon'])) {
        update_term_meta($term_id, 'icon', sanitize_text_field($_POST['term_icon']));
    }
}

Використання на фронтенді:

$terms = get_the_terms(get_the_ID(), 'project_category');
foreach ($terms as $term) {
    $color = get_term_meta($term->term_id, 'color', true) ?: '#ccc';
    $icon = get_term_meta($term->term_id, 'icon', true);
    printf(
        '<a href="%s" class="tag" style="--tag-color:%s">%s%s</a>',
        esc_url(get_term_link($term)),
        esc_attr($color),
        $icon ? '<span class="tag__icon">' . esc_html($icon) . '</span>' : '',
        esc_html($term->name)
    );
}

Кастомний порядок термінів

За замовчуванням терміни виводяться в алфавітному порядку. Для ручного порядку використовуємо мета-поле 'order':

add_action('edited_project_category', function (int $term_id): void {
    if (isset($_POST['term_order'])) {
        update_term_meta($term_id, 'order', absint($_POST['term_order']));
    }
});

// Сортування при виведенні
$terms = get_terms([
    'taxonomy' => 'project_category',
    'hide_empty' => false,
    'meta_key' => 'order',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
]);

Як оптимізувати продуктивність таксономій?

Запити за таксономіями з великою кількістю термінів і записів можуть бути повільними. Декілька правил:

  • Завжди використовуйте 'fields' => 'ids' у get_terms(), якщо потрібні тільки ID
  • При tax_query з декількома таксономіями — перевірте план запиту через EXPLAIN
  • Для публічних фільтрів з великими архівами — виносьте в Elasticsearch або кешуйте результати через Redis

За нашими тестами, таксономії працюють у 2-3 рази швидше за мета-поля. Використання індексів і кешування знижує вартість хостингу на 30-40% при збільшенні кількості запитів.

Покрокова інструкція створення кастомної таксономії

  1. Визначте структуру контенту та сценарії фільтрації. Зафіксуйте, скільки термінів і рівнів вкладеності знадобиться.
  2. Зареєструйте таксономію через register_taxonomy в хуці init. Вкажіть ієрархічність, ЧПУ-маску та show_in_rest => true.
  3. Додайте мета-поля до термінів через хуки {taxonomy}_add_form_fields та {taxonomy}_edit_form_fields. Реалізуйте збереження через created_{taxonomy} і edited_{taxonomy}.
  4. Налаштуйте шаблони архіву: taxonomy-{taxonomy}.php або в FSE — templates/taxonomy-{taxonomy}.html. Вставте кастомні фільтри.
  5. Оптимізуйте запити: використовуйте індекси, кешуйте результати, застосовуйте fields => ids. При необхідності — виносьте фільтрацію у зовнішній пошук.

Шаблон архіву таксономії

WordPress знаходить шаблон архіву за ієрархією: taxonomy-{tax}-{term}.php → taxonomy-{tax}.php → taxonomy.php → archive.php. У FSE темі — аналогічно через templates/taxonomy-project_category.html.

Що входить в роботу

Етап Що робимо Результат
Аналіз Вивчаємо структуру контенту, типи записів, сценарії фільтрації Схема таксономій та зв'язків
Реєстрація Створюємо таксономії, ЧПУ, прив'язку до CPT Реєстраційний код
Мета-поля Додаємо поля для термінів (колір, іконка, опис) Hooks та форми
Шаблони Верстаємо архіви таксономій та фільтри Готові сторінки
Оптимізація Налаштовуємо кешування, індекси, перевіряємо EXPLAIN Метрики швидкості

5 років досвіду, понад 50 проєктів з кастомними таксономіями — отримайте консультацію з вашого завдання. Ми підберемо оптимальну структуру та реалізуємо її з урахуванням продуктивності.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1141
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060