Всем привет! Сегодня на seo-mayak.com мы продолжим развивать функционал WordPress и на повестке тема — произвольные таксономии. Их еще не редко называют «пользовательскими таксономиями».
Мы подробно разберем работу функции register_taxonomy(), познакомимся с ее параметрами, пройдемся по аргументам и создадим две полноценных таксономии: древовидную (по типу стандартных рубрик) и не древовидную (по типу меток), конечно, с полным интерфейсом в админке.
Функционал произвольных записей и таксономий был внедрен разработчиками довольно давно, еще с версии 2.3, которая вышла аж в 2007 году. Именно тогда WordPress из чисто блогового движка превратился в многофункциональныю CMS, способную решать самые разные задачи.

Итак, что такое произвольные таксономии? Ну тут все просто.
Произвольные таксономии — это зарегистрированные в системе категории или метки, которые никак и ничем не связаны со стандартными рубриками или метками WordPress.
У любой таксономии есть свой уникальный идентификатор (имя). Например, у стандартных категорий — это «category». Кстати, вы никогда не задумывались откуда в урлах стандартных рубрик взялось слово «/category/»?

А взялось оно как раз из названия таксономии.
Также в произвольной структуре рубрик предусмотрен свой собственный цикл, который будет обрабатывает только тот тип записей, который указан в настройках функции, ну об этом чуть позже.
Несомненно, данный функционал открывает широчайшие возможности, ведь теперь можно создать неограниченное число полноценных разделов, со своими циклами обработки и структурой рубрик — это уже больше на портал похоже.
Идем далее. Для регистрации любой таксономии требуется указать тип записи, для которой эта таксономия будет создаваться. На блоге есть подробная статья о создании произвольных типов записей, поэтому сейчас я не буду вдаваться в детали и приведу лишь пример подключения.
Пример подключения произвольного типа записи
/* Регистрация произвольного типа записи kodex */ add_action('init', 'mayak_type_post_register'); function mayak_type_post_register() { $labels = array( 'name' => 'Кодекс', 'menu_name' => 'Кодекс', 'singular_name' => 'Кодекс', 'add_new' => 'Добавить запись', 'add_new_item' => 'Добавить новую запись', 'edit_item' => 'Редактировать запись', 'new_item' => 'Новая запись', 'all_items' => 'Все записи', 'view_item' => 'Посмотреть запись', 'search_items' => 'Найти запись', 'not_found' => 'Ничего не найдено', 'not_found_in_trash' => 'В корзине ничего не найдено' ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => null, 'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'post-formats', 'custom-fields') ); register_post_type('kodex',$args); }
Функция вставляется в файл functions.php. После чего в админке должен появиться блок с интерфейсом для созданного типа записи:
Как вы наверное догадались, данному типу записи я присвоил имя «kodex» (см. строчку №34). Запомним, потом оно нам еще пригодится, а сейчас давайте поближе познакомимся с функцией register_taxonomy().
Функция register_taxonomy()
Функция register_taxonomy() работает на основе класса WP_Taxonomy{}
Выглядит функция следующим образом:
register_taxonomy( $taxonomy, $object_type, $args );
Где:
$taxonomy (строка) (обязательно) — Имя регистрируемой таксономии (не допускаются пробелы и заглавные буквы).
$object_type (массив/строка) (обязательно) — Имя объекта (типа записи), для которой будет регистрироваться таксономия.
$args (массив) (необязательно) — Массив аргументов, которые может принимать функция.
Последний параметр является необязательным и если его упустить, то функция выведет стандартный интерфейс меток:
register_taxonomy('wordpress', array('kodex'));

Ниже список зарезервированных выражений, которые нельзя использовать в качестве имени регистрируемой таксономии.
attachment | feed | pb | static |
attachment_id | fields | perm | subpost |
author | hour | post | subpost_id |
author_name | link_category | post__in | tag |
calendar | m | post__not_in | tag__and |
cat | minute | post_format | tag__in |
category | monthnum | post_mime_type | tag__not_in |
category__and | more | post_status | tag_id |
category__in | name | post_tag | tag_slug__and |
category__not_in | nav_menu | post_type | tag_slug__in |
category_name | nonce | posts | taxonomy |
comments_per_page | nopaging | posts_per_archive_page | tb |
comments_popup | offset | posts_per_page | term |
customize_messenger_channel | order | preview | theme |
customized | orderby | robots | type |
cpage | p | s | w |
day | page | search | withcomments |
debug | page_id | second | withoutcomments |
error | paged | sentence | year |
exact | pagename | showposts | — |
Шаблон функции со всеми аргументами
Это шаблон! Не надо его никуда вставлять!
add_action( 'init', 'mayak_taxonomy_register' ); function mayak_taxonomy_register(){ $labels = array( 'name' => 'Категории', 'singular_name' => 'Категория', 'menu_name' => 'Категории' , 'all_items' => 'Все категории', 'edit_item' => 'Редактировать категорию', 'view_item' => 'Посмотреть категорию', 'update_item' => 'Сохранить категорию', 'add_new_item' => 'Добавить новую категорию', 'new_item_name' => 'Новая категория', 'parent_item' => 'Родительская категория', 'parent_item_colon' => 'Родительская категория:', 'search_items' => 'Поиск по категориям', 'popular_items' => 'Популярные Метки', 'separate_items_with_commas' => 'Список Меток (разделяются запятыми)', 'add_or_remove_items' => 'Добавить или удалить Метку', 'choose_from_most_used' => 'Выбрать Метку', 'add_or_remove_items' => 'Добавить или удалить Метку', 'not_found' => 'Меток не найдено', 'back_to_items' => 'Назад на страницу рубрик', ); $args = array( 'labels' => $labels, 'label' => 'Категории', 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_rest' => false, 'rest_base' => 'url_rest', 'rest_controller_class' => 'WP_REST_Terms_Controller', 'show_tagcloud' => true, 'show_in_quick_edit' => true, 'meta_box_cb' => null, 'show_admin_column' => true, 'description' => '', 'hierarchical' => true, 'update_count_callback' => '', 'query_var' => $taxonomy, 'rewrite' => true, 'sort' => true, '_builtin' => false, ); register_taxonomy('rubriki', array('kodex'), $args); }
Хочу обратить ваше внимание на строчку №47 — здесь мы регистрируем новую таксономию и вторым параметром array('kodex') обязательно указываем название произвольного типа записи.
Теперь аргументы и первым делом давайте разберем массив $labels.
Массив $labels
$labels = array('ключ' => 'значение') — в массиве $labels все значения должны содержать текст, который будет отображаться в админке. Это могут быть тексты кнопок, заголовки или уведомления.
name
'name' => 'Категории' — Заголовок для страницы редактирования произвольной категории.

По умолчанию: ничего не выводится.

На заметку! Если значение аргумента name окажется пустым, то на странице редактирования записи интерфейс рубрик выведен не будет.
singular_name
'singular_name' => 'Категория' — Название для одного элемента.
По умолчанию: _x( ‘Post Tag’, ‘taxonomy singular name’ ) или _x( ‘Category’, ‘taxonomy singular name’ ).
menu_name
'menu_name' => 'Категории' — Заголовок в меню админки.

По умолчанию: По умолчанию: значение аргумента name.
all_items
'all_items' => 'Все категории' — Заголовок для всего списка категорий.

По умолчанию: ‘Все рубрики’ или ‘Все метки’.
edit_item
'edit_item' => 'Редактировать категорию' — Заголовок для страницы редактирования произвольной таксономии.

По умолчанию: 'Изменить рубрику' или 'Изменить метку' .
view_item
'view_item' => 'Посмотреть категорию' — отображается на странице редактирования в админ баре (тулбаре).

По умолчанию: 'Посмотреть рубрику' или 'Посмотреть метку'.
update_item
'update_item' => 'Сохранить категорию' — используется при сохранении изменений через опцию «Свойство».

По умолчанию: 'Обновить рубрику' или 'Обновить метку'.
add_new_item
'add_new_item' => 'Добавить новую категорию' — Текст кнопок и заголовков.

По умолчанию: 'Добавить новую рубрику' или 'Добавить новую метку'.
new_item_name
'new_item_name' => 'Новая категория' — Текст для нового элемента таксономии.
По умолчанию: __( ‘Add New Tag’ ) или __( ‘Add New Category’ ).
parent_item
'parent_item' => 'Родительская категория' — Текст для опции выбора родительской категории (только для древовидных таксономий).

По умолчанию: 'Родительская рубрика'.
parent_item_colon
'parent_item_colon' => 'Родительская категория:' — То же, что parent_item, только с двоеточием на конце.
По умолчанию: null или 'Родительская рубрика:'.
search_items
'search_items' => 'Поиск по категориям' — текст для кнопки поиска.

По умолчанию: 'Поиск рубрик' или 'Поиск меток'.
popular_items
'popular_items' => 'Популярные метки' — Текст для популярных меток (только для не иерархических таксономий).
По умолчанию: 'Популярные метки' или null.
separate_items_with_commas
'separate_items_with_commas' => 'Список Меток (разделяются запятыми)' — Текст, который отображается под формой ввода новых меток на странице редактирования записи (только для не иерархических таксономий).

По умолчанию: 'Метки разделяются запятыми'.
add_or_remove_items
'add_or_remove_items' => 'Добавить или удалить метку' — Данный текст используется при отключенном javascript (только для не иерархических таксономий).
По умолчанию: 'Добавить или удалить метку'.
choose_from_most_used
'choose_from_most_used' => 'Выбрать метку' — Текст для выбора метки (только для не иерархических таксономий).

По умолчанию: 'Выбрать из часто используемых меток'.
not_found
'not_found' => 'Метки не заданы' — данный текст отображается, если не создано ни одной метки (только для не иерархических таксономий).

По умолчанию: 'Метки не найдены'.
back_to_items
'back_to_items' => 'Назад на страницу меток' — данный текст отображается если обновить изменения на странице редактирования категорий или меток.

По умолчанию: 'Назад к меткам'.
На заметку! Массив $labels также можно дополнить аргументами из функции get_taxonomy_labels().
Массив $args
'label' => 'Категории' (строка) — Текст для отображения в админке во множественном числе (необязательно).
По умолчанию: значение $labels->name.
'public' => 'true' (логическое) — Возможные значения: true / false. Выводить/Не выводить интерфейс таксономии в админке. Значение автоматически передается аргументам publicly_queryable, show_ui и show_in_nav_menus (необязательно).
По умолчанию: true.
'publicly_queryable' => 'true' (логическое) — Определяет отображать/не отображать элементы таксономии на внешней стороне сайта (необязательно).
По умолчанию: значение аргумента ‘public’.
'show_ui' => 'true' (логическое) — Отображать/Не отображать интерфейс таксономии в админке (необязательно).
Значение данного аргумента, в отличии от public, не распространяет свое действие на аргументы: publicly_queryable и show_in_nav_menus, тем самым предоставляя возможность более тонкой настройки.
Если при значении false попробовать перейти на страницу редактирования таксономии, wordpress выведет сообщение:

По умолчанию: значение аргумента ‘public’.
'show_in_menu' => 'true' (логическое) — Отображать/Не отображать название таксономии в меню админки (необязательно).
При значении false редактирование таксономии не запрещается.
По умолчанию: значение аргумента ‘show_ui’.
'show_in_nav_menus' => 'true' (логическое) — Отображать/Не отображать название таксономии в интерфейсе создания произвольного меню (необязательно).

По умолчанию: значение аргумента ‘public’.
'show_in_rest' => 'false,' (логическое) — Включать/Не включать таксономию в REST API (необязательно).
По умолчанию: false.
'rest_base' => 'url_rest' (строка)— Ярлык в REST API (необязательно).
По умолчанию: $taxonomy.
'rest_controller_class' => 'WP_REST_Terms_Controller' (строка) — Имя класса контроллера в REST API (необязательно).
По умолчанию: 'WP_REST_Terms_Controller'.
'show_tagcloud' => 'true' (логическое) — Разрешить/Запретить создавать облако меток для данной таксономии (необязательно).
По умолчанию: значение аргумента 'show_ui'.
'show_in_quick_edit' => 'true' (логическое) — Разрешить/Запретить отображать таксономию в опции «Свойства» на странице всех записей (необязательно).

По умолчанию: значение аргумента 'show_ui'.
'meta_box_cb' => 'post_categories_meta_box' (callback) — Название callback функции, которая будет будет отвечать за отображение блока (метабокса) категорий на странице редактирования записи (необязательно).
На заметку! callback — это передача сценария (исполняемого кода) в качестве аргумента.
В wordpress на этот случай предусмотрены две callback функции:
post_categories_meta_box — отображать как категории.
post_tags_meta_box — отображать как метки.
Например: если выбрать функцию post_tags_meta_box, то на странице редактирования записи интерфейс категорий будет выглядеть следующим образом:

Можно указать свою функцию, если таковая имеется и изменить интерфейс блока до неузнаваемости, а можно задать false и метабокс не будет выведен вовсе.
По умолчанию: null (в зависимости от значения параметра 'hierarchical' задействуется одна из вышепредставленных функций).
'show_admin_column' => 'true' (логическое) — Возможные значения: true / false. Отображать/Не отображать колонку «Категории» на странице «Все записи» (необязательно).

По умолчанию: значение аргумента false.
'description' => '' (строка) — Описание таксономии. (необязательно).
По умолчанию: ' ' (пустая строка).
'hierarchical' => 'true' (логическое) — Задает тип таксономии (необязательно).
true — Создать древовидную таксономию.
false — Создать не древовидную таксономию.
По умолчанию: false.
'update_count_callback' => '' (строка) — Название callback функции, которая будет срабатывать при изменении количества прикрепленных записей. (необязательно).

Встроенные функции:
_update_post_term_count — счетчик количества опубликованных записей закрепленных за данной таксономией.
_update_generic_term_count — для связанных типов записей (по умолчанию установлена для таксономии «link_category»).
По умолчанию: ' ' (пустая строка) — автоматически срабатывает функция _update_post_term_count().
'query_var' => $taxonomy (логическое/строка) — Строка — ключ запроса query_var (необязательно). Шаблон URL запроса:
/?{query_var}={term_slug}
Можно задать свой ключ.
При значении false отключаются, как сам запрос, так и все его параметры.
По умолчанию: название таксономии ($taxonomy).
'rewrite' => true (логическое/массив) — Определяет включить или отключить перезапись постоянных ссылок. Также можно задать массив аргументов. (необязательно).
Возможные аргументы массива:
slug — Можно задать свой ярлык для таксономии.
Например: 'rewrite' => array( 'slug' => 'new_category' )

По умолчанию: название таксономии ($taxonomy);
Важно! Ярлык не должен совпадать с именем типа записи.
with_front — можно задать префикс для постоянной ссылки.
По умолчанию true.
hierarchical — При значении true включиться поддержка древовидных URL, т.е, структура урла будет такая:
домен / ярлык_таксономии /категория / подкатегория
А при значении false такая:
домен / ярлык_таксономии / подкатегория
По умолчанию false;
На заметку! Массив передается в функцию add_permastruct(), поэтому дополнительно тут можно использовать аргументы из этой функции.
По умолчанию: true (включить перезапись).
'sort' => null (логическое) — Запоминать/Не запоминать порядок создания термов (необязательно). Шаблон URL запроса:
Например, при значении true, для не иерархической таксономии, в таблицу wp_term_relationships прописывается порядок добавления меток к записи:

Как показали эксперименты, аргумент sort, в принципе, ни на что не влияет.
По умолчанию: null (сортировка отключена).
'_builtin' => false (логическое) — Возможные значения: true / false (необязательно).
true — таксономия будет восприниматься системой как внутренняя (родная).
false — будет восприниматься как встроенная (произвольная).
По умолчанию: false.
Важно! Разработчики не рекомендуют использовать данный аргумент при регистрации произвольной таксономии!
Функция возвращает: ничего или WP_Error.
Хук register_taxonomy
В функции register_taxonomy() предусмотрен одноименный хук — register_taxonomy, с помощью которого можно изменять значения аргументов как у произвольных таксономий, так и у стандартных.
Применение:
add_action('registered_taxonomy', 'my_function', 10, 3); function my_function($taxonomy, $object_type, $args){ // какое-то действие }
Поменяем заголовок в меню админки для стандартной таксономии «category». Вместо Рубрики выведем Разделы:
add_action( 'registered_taxonomy', 'mayak_taxonomy_menu_rename'); function mayak_taxonomy_menu_rename($taxonomy) { if ( 'category' === $taxonomy ) global $wp_taxonomies; $wp_taxonomies[$taxonomy]->labels->menu_name = 'Разделы'; }
Результат:

Все просто. Теперь перейдем непосредственно к регистрации произвольных таксономий.
Регистрация таксономии
На примере я покажу, как зарегистрировать сразу две таксономии: древовидную (категории) и не древовидную (метки).
Из функции убрано все лишнее, хотя, конечно, ситуации бывают разные.
/* Регистрация произвольных таксономий */ add_action( 'init', 'mayak_taxonomy_register' ); function mayak_taxonomy_register(){ $labels = array( 'name' => 'Категории', 'singular_name' => 'Категория', 'menu_name' => 'Категории' , 'all_items' => 'Все категории', 'edit_item' => 'Редактировать категорию', 'view_item' => 'Посмотреть категорию', 'update_item' => 'Сохранить категорию', 'add_new_item' => 'Добавить новую категорию', 'parent_item' => 'Родительская категория', 'search_items' => 'Поиск по категориям', 'back_to_items' => 'Назад на страницу категорий', 'most_used' => 'Популярные категории', //get_taxonomy_labels() ); $args = array( 'labels' => $labels, 'show_admin_column' => true, 'hierarchical' => true, ); register_taxonomy('rubriki', array('kodex'), $args); $labels_tag = array( 'name' => 'Метки для Кодекса', 'singular_name' => 'Метка', 'menu_name' => 'Метки для кодекса' , 'search_items' => 'Поиск по Меткам', 'all_items' => 'Все Метки', 'edit_item' => 'Редактировать Метку', 'view_item' => 'Посмотреть страницу Метки', 'update_item' => 'Сохранить Метку', 'add_new_item' => 'Добавить новую Метку', 'new_item_name' => 'Название новой Метки', 'not_found' => 'Меток не найдено', 'back_to_items' => 'Назад на страницу меток', ); $args_tag = array( 'labels' => $labels_tag, 'show_admin_column' => true, 'hierarchical' => false, ); register_taxonomy('metki', array('kodex'), $args_tag); }
Также можно подключить к одной таксономии несколько типов записей:
register_taxonomy('Имя_таксономии', array('Тип_записи_1', 'Тип_записи_2'), $ags);
Если все сделано правильно, то в админке должен появиться интерфейс вновь созданных таксономий:

Нам осталось вывести наши таксономии на сайте. Давайте разберемся, как можно это сделать.
Вывод произвольной таксономии
Вариантов вывода таксономии думаю можно много придумать, но я хочу вам предложить несколько, на мой взгляд, самых оптимальных решений.
1. С помощью функции wp_list_categories():
<?php $args = array( 'taxonomy' => 'rubriki', // Название произвольной таксономии 'orderby' => 'name', // Сортируем по названия, согласно алфавиту 'show_count' => 1, // Выводим количество записей 'exclude' => 10,22, // Исключаем рубрики с ID 10 и 22 'hierarchical' => 1, // Включаем древовидный список 'title_li' => '', // Убираем заголовок списка 'use_desc_for_title' => 1 // Выводим описание рубрик ); ?> <ul> <?php wp_list_categories( $args ); ?> </ul>
2. С помощью функции get_terms():
<?php $terms = get_terms('rubriki'); if( $terms && ! is_wp_error($terms) ){ echo "<ul>"; foreach($terms as $term){ echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>'; } echo "</ul>"; } ?>
3. С помощью функции get_categories():
<?php $terms = get_categories(array('taxonomy' => 'rubriki')); foreach ($terms as $categories) { echo '<li><a href="' . get_category_link( $category->term_id ) . '">' . $categories->cat_name . '</a><br><span class="small-text">' . $categories->category_description . '</span></li>'; } ?>
4. Выведем облако произвольных меток с помощью функции wp_tag_cloud:
<?php wp_tag_cloud(array('taxonomy' => 'metki')); ?>
Вставлять в файл sitebar.php или в виджет.
Вывод категорий в зависимости от таксономии и типа записи
Бывает, что тематика сайта подразумевает наличие множества произвольных разделов и не очень удобно, когда в сайдбаре вытягивается длинная «простыня» из рубрик и подрубрик.
Поэтому нередко требуется функционал, который позволял бы выводить категории только в том разделе, к которому они относятся.
Пример: Выведем две произвольные таксономии только на тех страницах, к которым они относятся.
function mayak_sort_category(){ if ( is_tax('Имя_произвольной_таксономии_1') or is_singular('Имя_произвольного_типа_записи_1') or is_post_type_archive( 'Имя_произвольного_типа_записи_1' ) ){ $args = array( 'taxonomy' => 'Имя_произвольной_таксономии_1', 'orderby' => 'name', 'show_count' => 1, 'hierarchical' => 1, 'title_li' => '', 'use_desc_for_title' => 1, ); echo '<h5>Произвольные категории 1</h5>'; echo '<ul>'; wp_list_categories($args); echo '</ul>'; } elseif ( is_tax('Имя_произвольной_таксономии_2') or is_singular('Имя_произвольного_типа_записи_2') or is_post_type_archive( 'Имя_произвольного_типа_записи_2' ) ){ $args = array( 'taxonomy' => 'Имя_произвольной_таксономии_2', 'orderby' => 'name', 'show_count' => 1, 'hierarchical' => 1, 'title_li' => '', 'use_desc_for_title' => 1, ); echo '<h5>Произвольные категории 2</h5>'; echo '<ul>'; wp_list_categories($args); echo '</ul>'; } else { $args = array( 'orderby' => 'name', 'show_count' => 1, 'hierarchical' => 1, 'title_li' => '', 'use_desc_for_title' => 1, ); echo '<h5>Стандартные категории</h5>'; echo '<ul>'; wp_list_categories($args); echo '</ul>'; } }
Функция вставляется в файл functions.php. Понятно, что в функцию надо вписать свои имена таксономий и типов записей.
Код вызова:
<?php mayak_sort_category() ?>
Вызвать функцию можно в файле sitebar.php или через виджеты, если, конечно, они у Вас поддерживают выполнение php кода.
Таблица изменений
Версия | Дата | Описание |
---|---|---|
2.3.0 | 24.09.2007 | Внедрение |
3.5.0 | 11.12.2012 | Изменена логика аргумента show_ui. Теперь при значении false отключается вывод интерфейса таксономий в админке. |
4.2.0 | 23.04.2015 | Введен аргумент show_in_quick_edit. |
4.4.0 | 08.12.2015 | Изменено действие аргументов: public (теперь он также контролирует отображение таксономии на лицевой стороне сайта) и show_ui (теперь он применяется на странице редактирования терма). |
4.5.0 | 12.04.2016 | Введен аргумент publicly_queryable |
4.7.0 | 06.12.2016 | Введены аргументы: show_in_rest, rest_base, rest_controller_class. |
Файл: wp-includes/taxonomy.php (Развернуть)
До встречи!
С уважением, Виталий Кириллов
Статьи по теме:
Функция register_post_type() — произвольные типы записей WordPress
wp_list_categories() — как выводить рубрики WordPress
Шаблоны для категорий WordPress. Как сделать каталог из рубрики
Картинки для категорий WordPress
Title, description, keywords и h1 для категорий WordPress
Здравствуйте! Хорошее подробное описание всех функций, большое спасибо! У меня вопрос, создал таксономию
Почему-то при переходе на неё по ссылке /products/ всё работает ок, используется шаблон archive-products.php
А вот если я создаю категории в этой таксономии, то страница вида /products/stoljarnye-izdelija/ выдаёт ошибку 404
Не могу понять в чём может быть дело. Постоянные ссылки обновлял — не помогает.
Здравствуйте, Александр!
Если Вы создали таксу под именем «products_tax», то и урл у категорий будет /products_tax/stoljarnye-izdelija/.
Значение можно изменить в аргументе rewrite
register_taxonomy('products_tax', array('products'), $args);
На сколько я понимаю, я уже сделал это «Значение можно изменить в аргументе rewrite»
Я уже начал сомневаться в том, что рубрики пользовательских таксономий способны работать как стандартные категории. Или я ошибаюсь?
/products_tax/stoljarnye-izdelija/ всё та же 404
Понятно, у вас одинаковые имена у таксы и у типа записи, так не получится.
У стандартных категорий уникальное имя: «category», а у стандартных записей: «post».
Задайте для таксы в аргументе «rewrite» имя отличное от названия типа записи и все будет работать.
Ура, Виталий, это победа! Благодарю Вас! 6 часов не мог понять в чём проблема) Изменил на products-category, остался вопрос какой файл шаблона будет выводить эти категории? Сейчас для всех эти категорий используется archive.php
Попробовал создать archive-products-category.php — не работает
Чтобы подключить шаблон надо, чтобы в функции регистрации типа записи у аргумента has_archive стояло значение true. По умолчанию: false.
Спасибо Вам Виталий, добрый человек!