Задача заключается в том чтобы сделать родительское отношение, аналогично тому как работают pages (статические страницы).
В интернете много странных решений вплоть до функций преобразования URL.
Как реализовать иерархию через таксономию я до конца не разобрался.
Моя ситуация.
Есть проекты — projects. Необходимо сформировать разделы проектов по их категориям. Например design. А подкатегория дизайна — фирменный стиль, firm-style.
Итого конечный урл моего проекта должен быть /projects/design/firm-style/my-project-name.
Это делается не сложно. В общем все описано в документации, но почему пришлось не мало поискать чтобы связать вместе эти простые вещи.
Создаем post type. Ключевые параметры hierarchical, rewrite, supports
add_action( 'init', 'register_type_project' );
function register_type_project() {
register_post_type( 'project', [
'labels' => [
'name' => 'Проекты',
'singular_name' => 'Проект',
'menu_name' => 'Проекты',
'name_admin_bar' => 'Проекты',
'add_new' => 'Добавить',
'add_new_item' => 'Добавить ',
'new_item' => 'Новый Проект',
'edit_item' => 'Редактировать Проект',
'view_item' => 'Открыть Проект',
'all_items' => 'Проекты',
'search_items' => 'Найти Проект',
'parent_item_colon' => 'Родительский Проект',
'not_found' => 'Проект не найден',
'not_found_in_trash' => 'В корзине ничего нет'
],
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_rest' => true, // убирает гутенберг
'show_in_admin_bar' => false,
'query_var' => true,
'capability_type' => 'post',
'capabilities' => [
'edit_post' => 'edit_pages',
'read_post' => 'edit_pages',
'delete_post' => 'edit_pages',
'edit_posts' => 'edit_pages',
'edit_others_posts' => 'edit_pages',
'publish_posts' => 'edit_pages',
'read_private_posts' => 'edit_pages',
],
'has_archive' => true,
'menu_position' => 10,
'menu_icon' => 'dashicons-screenoptions',
'hierarchical' => true, // иерархия
'supports' => [ 'page-attributes', 'title', 'thumbnail','editor' ], // page-attributes - блок редактирования родительского элемента
'rewrite' => [
'slug' => 'projects',
] // слаг для post type
] );
}
У нас появились проекты. Тут я уже сделал заранее разделы.

При создание проекта мы видим блок родительского отношения

И соответственно добавляем наш проект в саму нижнюю категорию. Url преобразуется согласно иерархии.

!ВАЖНО.
При работе с post-type и rewrite необходимо перезагрузить настройки ссылок через настройки Постоянные ссылки. Просто зайти и сохранить ничего не изменяя.
