Отображение таксономий пользовательского типа записей как архивной страницы
У меня есть пользовательский тип записей под названием results
. Я также создал категории для этого типа записей с помощью таксономии. Не уверен, что настроил всё правильно, но мой код работает, поэтому я оставил его как есть. Если вы видите лучший способ или какие-либо ошибки, пожалуйста, дайте мне знать.
Я могу создавать пользовательские записи и назначать им категории. Далее я хочу создать страницу категорий, которая будет работать как обычный archive.php, но только для категорий пользовательского типа записей.
Например, у меня есть пользовательская запись типа results
, и я установил для неё категорию car accidents
. Я хочу отображать все такие записи, как это делает archive.php для обычных записей.
Я попытался перейти по URL такого вида, но попадаю на страницу 404, хотя у меня есть файл archive-results.php
www.myurl.com/results/categories/car-accidents
Вот код, который я использовал для настройки пользовательского типа записей и таксономии. Извините, если он длинный, но я считаю необходимым включить всё.
// Создание пользовательского типа записей
function create_posttype() {
register_post_type( 'Results',
array(
'labels' => array(
'name' => __( 'Results' ),
'singular_name' => __( 'Results' )
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'results'),
'taxonomies' => array( 'results', 'result-category' ),
)
);
}
add_action( 'init', 'create_posttype' );
// Создание категорий для конкретного типа записей
function tr_create_my_taxonomy() {
register_taxonomy(
'results-categories',
'results',
array(
'label' => __( 'Result Categories' ),
'rewrite' => array( 'slug' => 'result-category' ),
'hierarchical' => true,
'has_archive' => true
)
);
}
add_action( 'init', 'tr_create_my_taxonomy' );
Может быть, я что-то упустил, что мешает работе этого URL?
www.myurl.com/results/categories/car-accidents
Заранее спасибо
Ваши желаемые URL:
www.example.com/results/post-name/
www.example.com/results/categories/category-name/
Два изменения по сравнению с исходным кодом:
Добавлен приоритет для обоих хуков
add_action
, чтобы изменить порядок их выполнения. Порядок важен в данном случае, потому что правила перезаписи вложений типа записи переопределяют правила перезаписи таксономий. Побочный эффект: URL вложений не работают для этого типа записи!Перезапись для таксономии изменена на
results/categories
.
// Создание пользовательского типа записи
function create_posttype() {
register_post_type( 'results',
array(
'labels' => array(
'name' => __( 'Results' ),
'singular_name' => __( 'Results' )
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'results'),
'taxonomies' => array( 'results', 'result-category' ),
)
);
}
// ДОБАВЛЕН ПРИОРИТЕТ
add_action( 'init', 'create_posttype', 9 );
// Создание категории для конкретного типа записи
function tr_create_my_taxonomy() {
register_taxonomy(
'results-categories',
'results',
array(
'label' => __( 'Result Categories' ),
// ИЗМЕНЕН SLUG
'rewrite' => array( 'slug' => 'results/categories' ),
'hierarchical' => true,
'has_archive' => true
)
);
}
// ДОБАВЛЕН ПРИОРИТЕТ
add_action( 'init', 'tr_create_my_taxonomy', 8 );
Также обратите внимание, что наиболее специфичным общим шаблоном для этого будет taxonomy-results-categories.php
, который будет использовать taxonomy.php
в случае отсутствия, затем archive.php
.
