WP Не отображается кастомная рубрика для кастомного типа поста
Подскажите, создал кастомную таксономию вендоров
//
///*
// * Регистрация таксономии производителей
// */
add_action( 'init', 'create_vendor_taxonomies' );
// функция, создающая таксономии "vendors" для постов типа "vendor"
function create_vendor_taxonomies(){
// Добавляем недревовидную таксономию 'vendors' (как метки)
register_taxonomy('vendors', array('vendor', 'post'), array(
'hierarchical' => true,
'labels' => array(
'name' => _x( 'Производители', 'taxonomy general name' ),
'singular_name' => _x( 'Vendor', 'taxonomy singular name' ),
'search_items' => __( 'Поиск производителей' ),
'all_items' => __( 'Все производители' ),
'parent_item' => __( 'Parent Vendor' ),
'parent_item_colon' => __( 'Parent Vendor:' ),
'edit_item' => __( 'Править производителя' ),
'update_item' => __( 'Обновить производителя' ),
'add_new_item' => __( 'Добавить нового производителя' ),
'new_item_name' => __( 'Имя нового производителя' ),
'menu_name' => __( 'Vendors' ),
),
'show_ui' => true,
'show_in_rest' => true,
'query_var' => true,
'has_archive' => true,
));
}
Создал кастомный тип записей Игры
/*
* Тип записей для производителей Тип записи Game
*/
function create_games_posttype() {
$labels = array(
'name' => _x( 'Games', 'Тип записей Games', 'bahisyasal' ),
'singular_name' => _x( 'Game', 'Тип записей game', 'bahisyasal' ),
'menu_name' => __( 'Games', 'bahisyasal' ),
'all_items' => __( 'Все игры', 'bahisyasal' ),
'view_item' => __( 'Обзор игры', 'bahisyasal' ),
'add_new_item' => __( 'Добавить новую игру', 'bahisyasal' ),
'add_new' => __( 'Добавить новую игру', 'bahisyasal' ),
'edit_item' => __( 'Редактировать игру', 'bahisyasal' ),
'update_item' => __( 'Обновить игру', 'bahisyasal' ),
'search_items' => __( 'Искать игру', 'bahisyasal' ),
'not_found' => __( 'Не найдено', 'bahisyasal' ),
'not_found_in_trash' => __( 'Не найдено в корзине', 'bahisyasal' ),
);
$args = array(
'label' => __( 'games', 'bahisyasal' ),
'description' => __( 'Каталог игр', 'bahisyasal' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments', 'revisions', 'custom-fields', ),
'taxonomies' => array('category', 'vendors'),
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => 5,
'can_export' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'vendors',
'with_front' => false
),
'exclude_from_search' => false,
'publicly_queryable' => true,
'menu_icon' => 'dashicons-buddicons-activity',
'capability_type' => 'page',
);
register_post_type( 'games', $args );
}
add_action( 'init', 'create_games_posttype', 0 );
Хочу что бы для типа записи games можно б было выбрать производителя vendors ... Но почему-то не добавляется в настройках выбора нужной рубрики.

Не могу понять где я допускаю ошибку. Вот документация про register_post_type
Ну и собственно мне необходимо сделать корректные URL
Что-то по типу https://mysite.loc/Blizzard-Entertainment/diablo-2 Прочитал что за это отвечает значение 'rewrite' надеюсь что ничего не напутал. Но почему не отображает vendors не понимаю. Прописал же строку 'taxonomies' => array('category', 'vendors'),
Ответы (2 шт):
У тебя ошибка при регистрации таксономии. Нужно правильно указывать тип поста.
register_taxonomy('vendors', array('games', 'post')
для того что таксономия появилась на странице создания/редактирования поста ее нужно добавить в параметры функции register_taxonomy
register_taxonomy('vendors', array('vendor', 'post', 'games'), array(
для отображения слага таксономии в ссылке нужно корректно указать параметр rewrite, например вот так
'rewrite' => [
'slug' => 'games/%vendors%', // тип поста и сама таксономия
'with_front' => false
],
Теперь нужно добавить хук, чтобы заменять %vendors% при получении ссылки на запись через функцию get_permalink и производные от нее функции:
add_filter('post_type_link', 'vendors_permalink', 1, 2 );
function vendors_permalink( $permalink, $post ) {
if ( strpos( $permalink, '%vendors%' ) === false ) {
return $permalink;
}
$terms = get_the_terms( $post, 'vendors' );
if ( ! is_wp_error( $terms ) && ! empty( $terms ) && is_object( $terms[0] ) ) {
$taxonomy_slug = $terms[0]->slug;
} else{
$taxonomy_slug = 'no-vendors';
}
return str_replace( '%vendors%', $taxonomy_slug, $permalink );
}
в итоге у вас получится ссылка примерно такого вида:
https://mysite.loc/games/Blizzard-Entertainment/diablo-2