Добавление таксономии в тип записи с дружелюбным URL и одинаковым префиксом
В этой статье мы разберем, как создать тип записи для часто задаваемых вопросов (FAQ) и категории для него (таксономия faqcat
). Мы также сделаем так, чтобы таксономия имела тот же префикс, что и тип записи.
Пример структуры URL
- URL для поста:
site.com/faq/{категория}/{название-вопроса}
- URL для таксономии:
site.com/faq/{категория}
Важно зарегистрировать таксономию до того, как мы создадим тип записи.
Код для регистрации типа записи и таксономии
Шаг 1: Регистрация таксономии и типа записи
Используем следующий код для регистрации:
// Регистрация типа записи и таксономии
add_action( 'init', 'register_faq_post_type' );
// Фильтр для создания дружелюбного URL для типа записи
add_filter( 'post_type_link', 'faq_permalink', 1, 2 );
function register_faq_post_type() {
// Регистрация категории вопросов - faqcat
register_taxonomy( 'faqcat', [ 'faq' ], [
'label' => 'Категория вопросов',
'labels' => [
'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,
'show_ui' => true,
'show_tagcloud' => false,
'hierarchical' => true, // Категории могут быть иерархическими
'rewrite' => [ 'slug' => 'faq', 'hierarchical' => false, 'with_front' => false, 'feed' => false ],
'show_admin_column' => true,
] );
// Регистрация типа записи - вопросы - faq
register_post_type( 'faq', [
'label' => 'Вопросы',
'labels' => [
'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' => [
'slug' => 'faq/%faqcat%',
'with_front' => false,
'pages' => false,
'feeds' => false,
'feed' => false,
],
'has_archive' => 'faq',
'query_var' => true,
'supports' => [ 'title', 'editor' ], // Поддержка заголовка и редактора
'taxonomies' => [ 'faqcat' ],
] );
}
Шаг 2: Настройка дружелюбного URL
Теперь мы создадим функцию, которая будет изменять URL в соответствии с выбранной категорией.
function faq_permalink( $permalink, $post ) {
// Проверяем, является ли это нашим типом записи
if( strpos( $permalink, '%faqcat%' ) === false ){
return $permalink;
}
// Получаем элементы таксономии
$terms = get_the_terms( $post, 'faqcat' );
// Если категория найдена, изменяем URL
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 );
}
Заключение
Теперь у вас есть функционал для создания типов записей "Вопросы" и соответствующей таксоно��ии "Категории вопросов". Это помогает организовать содержимое на вашем сайте и делает URL более понятными для пользователей. Не забывайте тестировать каждую часть кода, чтобы убедиться, что все работает корректно.