Короткий ответ: в чистом WordPress термины (метки в таксономии post_tag) глобальны для всей таксономии — нельзя «по‑умолчанию» иметь одну и ту же метку 111 отдельно для каждой рубрики. Надёжный вариант — не пытаться «обмануть» WP, а создать отдельную таксономию меток для каждой рубрики или реализовать контекстные (ограниченные) теги программно.
Пояснение и варианты решения
1) Рекомендованный и самый простой для реализации способ — отдельная таксономия для каждой рубрики
- Для рубрики 1 зарегистрируйте таксономию, например tag_cat_1; для рубрики 2 — tag_cat_2 и т.д.
- Таксономии независимы, в них можно иметь термины с одинаковыми именами (каждая таксономия — свой «набор» меток).
Пример кода (в functions.php или плагине):
```php
add_action('init', function() {
register_taxonomy('tag_cat_1', 'post', [
'labels' => ['name' => 'Метки рубрики 1'],
'public' => true,
'show_in_rest' => true,
'hierarchical' => false,
]);
register_taxonomy('tag_cat_2', 'post', [
'labels' => ['name' => 'Метки рубрики 2'],
'public' => true,
'show_in_rest' => true,
'hierarchical' => false,
]);
});
```
Если рубрик много или они динамические — можно автоматически зарегистрировать таксономии по списку категорий (в init получить категории и в цикле register_taxonomy).
Плюсы: простая концепция, WordPress корректно работает с таким набором. Минусы: в админке будет несколько блоков меток (по одной таксономии на рубрику); если рубрик очень много — будет громоздко.
2) Если не хотите множество таксономий — «контекстные» метки (сложнее)
- Оставляете одну таксономию post_tag, но заводите для терминов мета‑поле (termmeta) с указанием «контекста/категории».
- Пишете фильтры, чтобы при показе меток на странице рубрики/при выборе меток в админке отображались только метки для этой рубрики; при прикреплении к посту — автоматически выбирать нужный термин в контексте категории.
- Это даёт желаемое поведение, но требует немало кода (фильтры get_terms/get_terms_args, модификация автозаполнения Gutenberg/Classic для тегов и т.д.).
3) Хаки вроде «создать 111 и 1111, потом переименовать» — не надёжны
- WP опирается на slug (и внутренние проверки) и не позволит иметь две одинаковые «идентичные» метки в одной таксономии без конфликта. Попытки «обмануть» системой приводят к неожиданностям (слияние, добавление суффиксов в slug и т.п.). Поэтому этот путь не стоит.
4) Ещё простые альтернативы
- Древовидные/родительские термины: можно сделать родителем название рубрики и создавать дочерние термины — но slug всё равно должен быть уникален в таксономии, это не решит полностью проблему одинаковых имён/slug.
- Префиксы в названии/slug: например «1:111», «2:111». Простая, но «грязная» и видна пользователям.
Плагины и инструменты
- Custom Post Type UI (CPT UI) — удобная утилита для регистрации таксономий без кода (подойдёт, если вы выбираете вариант «отдельная таксономия на рубрику»).
- TaxoPress — менеджер терминов/таксономий, много функций по управлению терминами (можно использовать для организации и фильтрации терминов).
- Term Management Tools — помогает разделять/сливать/копировать термины; полезно при миграции.
- Вариант «Category Specific Tags» (бывший плагин) существовал раньше — но многие такие плагины устарели. Проверяйте совместимость с WP 6.9.4.
Практические рекомендации
- Если рубрик немного (до нескольких десятков) — создайте отдельную таксономию для каждой рубрики (или вручную, или через CPT UI). Это самый надёжный путь.
- Если рубрик очень много и нужен гибкий механизм — реализуйте термин‑meta + фильтры, но лучше поручить реализацию разработчику (надо доработать админский интерфейс, автозаполнение тегов, сохранение и миграцию терминов).
- Не пытайтесь маскировать или переименовывать термины, если задача — хранить независимые наборы «111» для разных рубрик — используйте отдельные таксономии/контекст.
Если хотите, могу:
- Подготовить код для автоматической регистрации таксономий по существующим категориям;
- Или дать пример плагина/кода для «контекстных меток» (termmeta + фильтрация в админке/фронтенде).
Что предпочитаете?