Добрый день.
Вставил код с WP-KAMA (регистрация таксономии и постов с префиксом в ЧПУ у таксономии как и у типа записи). Всё отлично работает. Но у меня проблема.
После перезаписи ЧПУ в админке, перестаёт меняться(перезаписываться) URL при смене категорий к посту. Структура ЧПУ произвольо - /%category%/%postname%/
Пример: Публикую (CPT) запись - у неё по умолчанию URL http:// ...faq/
no-faqcat/kak-tak/
(no-faqcat - категория по умолчанию)
Назначаю ей категорию (taxonomies) "
Рубин". Обновляю в браузере страницу поста (где вывод постов). В самой странице хлебные крошки изменились (появилась категория "Рубин") а URL страницы остался таким же http:// ...faq/
no-faqcat/kak-tak/ (без новой назначенной категории "Рубин").
В админке адрес поменялся и при нажатии "посмотреть запись" переходим на http:// .../faq/
rubin/kak-tak/ но при этом, осталась страница с URL с "
no-faqcat"
Помогите пожалуйста. Что и куда надо добавить - прописать?
add_action( 'init', 'register_faq_post_type' );
add_filter( 'post_type_link', 'faq_permalink', 1, 2 );
function register_faq_post_type() {
register_taxonomy( 'faqcat', [ 'faq' ], [
'label' => 'Раздел вопроса',
'labels' => array(
'name' => 'Разделы вопросов',
'singular_name' => 'Раздел вопроса',
'search_items' => 'Искать Раздел вопроса',
'all_items' => 'Все Разделы вопросов',
'parent_item' => 'Родит. раздел вопроса',
'parent_item_colon' => 'Родит. раздел вопроса:',
'edit_item' => 'Ред. Раздел вопроса',
'update_item' => 'Обновить Раздел вопроса',
'add_new_item' => 'Добавить Раздел вопроса',
'new_item_name' => 'Новый Раздел вопроса',
'menu_name' => 'Раздел вопроса',
),
'description' => 'Рубрики для раздела вопросов',
'public' => true,
'show_in_nav_menus' => false, // равен аргументу public
'show_ui' => true, // равен аргументу public
'show_tagcloud' => false, // равен аргументу show_ui
'hierarchical' => true,
'rewrite' => array('slug'=>'faq', 'hierarchical'=>false, 'with_front'=>false, 'feed'=>false ),
'show_admin_column' => true,
] );
register_post_type( 'faq', [
'label' => 'Вопросы',
'labels' => array(
'name' => 'Вопросы',
'singular_name' => 'Вопрос',
'menu_name' => 'Архив вопросов',
'all_items' => 'Все вопросы',
'add_new' => 'Добавить вопрос',
'add_new_item' => 'Добавить новый вопрос',
'edit' => 'Редактировать',
'edit_item' => 'Редактировать вопрос',
'new_item' => 'Новый вопрос',
),
'description' => '',
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_rest' => false,
'rest_base' => '',
'show_in_menu' => true,
'exclude_from_search' => false,
'capability_type' => 'post',
'map_meta_cap' => true,
'hierarchical' => false,
'rewrite' => array( 'slug'=>'faq/%faqcat%', 'with_front'=>false, 'pages'=>false, 'feeds'=>false, 'feed'=>false ),
'has_archive' => 'faq',
'query_var' => true,
'supports' => array( 'title', 'editor' ),
'taxonomies' => array( 'faqcat' ),
] );
}
function faq_permalink( $permalink, $post ){
// выходим если это не наш тип записи: без холдера %faqcat%
if( strpos( $permalink, '%faqcat%' ) === false ){
return $permalink;
}
// Получаем элементы таксы
$terms = get_the_terms( $post, 'faqcat' );
// если есть элемент заменим холдер
if( ! is_wp_error( $terms ) && !empty( $terms ) && is_object( $terms[0] ) ){
$term_slug = array_pop( $terms )->slug;
}
// элемента нет, а должен быть...
else {
$term_slug = 'no-faqcat';
}
return str_replace( '%faqcat%', $term_slug, $permalink );
}