Страница архива произвольного типа записей не работает
Я пытаюсь создать произвольный тип записей. Все работает нормально, кроме страницы архива. Моя страница архива произвольного типа записей archive-courses.php не работает, вместо нее отображается стандартный archive.php. Есть ли что-то неправильное в моем коде?
Может кто-нибудь помочь, пожалуйста?
function td_courses() {
$labels = array(
'name' => _x( 'Курсы', 'td' ),
'singular_name' => _x( 'Курсы', 'td' ),
'add_new' => _x( 'Добавить новый', 'td' ),
'add_new_item' => __( 'Добавить новый курс' ),
'edit_item' => __( 'Редактировать курс' ),
'new_item' => __( 'Новые курсы' ),
'all_items' => __( 'Курсы' ),
'view_item' => __( 'Просмотр курсов' ),
'search_items' => __( 'Поиск курсов' ),
'not_found' => __( 'Курсы не найдены' ),
'not_found_in_trash' => __( 'В корзине курсы не найдены' ),
'menu_name' => 'Курсы'
);
$args = array(
'labels' => $labels,
'public' => true,
'menu_position' => 10,
'menu_icon' => 'dashicons-welcome-learn-more',
'supports' => array( 'title', 'editor', 'thumbnail', 'author' ),
'has_archive' => true,
'capability_type' => 'page',
'rewrite' => array( 'slug' => 'course' ),
);
register_post_type( 'courses', $args );
}
add_action( 'init', 'td_courses' );
function td_courses_taxonomies() {
$labels = array(
'name' => _x( 'Категории курсов', 'td' ),
'singular_name' => _x( 'Категории курсов', 'td' ),
'search_items' => __( 'Поиск категории курсов' ),
'all_items' => __( 'Все категории курсов' ),
'parent_item' => __( 'Родительская категория курсов' ),
'parent_item_colon' => __( 'Родительская категория курсов:' ),
'edit_item' => __( 'Редактировать категорию курсов' ),
'update_item' => __( 'Обновить категорию курсов' ),
'add_new_item' => __( 'Добавить новую категорию курсов' ),
'new_item_name' => __( 'Название новой категории курсов' ),
'menu_name' => __( 'Категория курсов' ),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'courses-list' ),
);
register_taxonomy( 'courses_category', array( 'courses' ), $args );
}
add_action( 'init', 'td_courses_taxonomies', 0 );
Спасибо

Ваш тип записи courses
имеет перезаписываемый ярлык (слаг) course
. Таким образом, шаблон архива будет называться archive-course.php
.
Ваша таксономия courses_category
имеет перезаписываемый ярлык course
, поэтому шаблон архива таксономии будет taxonomy-courses.php
.
Эта полная иерархия шаблонов может быть полезной.
Если вы хотите, чтобы страница архива, отображающая все записи типа courses
, находилась по адресу yoursite.com/courses
, вам следует назначить типу записи перезаписываемый ярлык courses
. (Я считаю, что это значение по умолчанию, так как ваш тип записи называется courses
.)
Шаблон архива таксономии taxonomy-[slug].php
будет вызываться при просмотре страницы архива всех записей типа courses
, принадлежащих определенному термину таксономии. Например, если у вас есть термин beginner
и перезаписываемый ярлык courses
для термина таксономии, вы увидите архив курсов для начинающих по адресу yoursite.com/courses/beginner
.
Если вы назначите одинаковый перезаписываемый ярлык для типа записи и таксономии, могут возникнуть конфликты. Но я не уверен в этом.
Как сказал Pieter Goosen, вам нужно будет сбрасывать правила перезаписи (rewrite rules) каждый раз, когда вы вносите подобные изменения.

Я даже не проверял rewrite slugs, когда бегло просматривал код. Скорее всего, проблема именно в rewrite slug. Вы можете использовать одинаковый слаг для своего типа записи и таксономии, но это потребует довольно много дополнительной работы. Я помню, что отвечал на подобный вопрос некоторое время назад, где мы использовали плагин для решения проблемы с rewrite rules. Короче говоря, действительно лучше избегать одинаковых rewrite slugs.

Странно, я изменил имя своего архива на archive-course.php, но проблема осталась. Также изменил rewrite slug для таксономий на courses-list, но безрезультатно :(

обновите свой вопрос с тем, что у вас сейчас, сложно понять, нужно ли вам использовать course
или courses
?

Вы снова сбросили правила перезаписи? Вот что я рекомендую попробовать: создайте файлы archive-course.php
и archive-courses.php
, а затем попробуйте удалить ваши правила перезаписи, чтобы увидеть, куда оно перенаправляет. Убедитесь, что вы смотрите на правильную страницу (ваш тег <body>
должен иметь класс post-type-archive-courses
-- если тема правильно использует body_class()
).

Да. Я снова сохранил постоянные ссылки, и в моем шаблоне есть класс body, который показывает список классов archive tax-courses_category term-test-1 term-6 logged-in admin-bar hfeed customize-support
Также я создал обе страницы архива: archive-courses-list.php, archive-courses.php и archive-course.php, но ни одна из них не работает

Указанные вами классы добавляются к архиву таксономии, который будет загружать файл шаблона taxonomy-<slug>.php
. Если вы не видите класс post-type-archive-courses
в теге body, значит вы не находитесь на странице архива типа записи.

Да. Наконец-то моя страница отображается. Файл taxonomy-courses_category.php работает.
Но я все еще не понимаю, почему мой archive-courses.php не работает. В прошлый раз я использовал эту систему для отображения категорий, но в этот раз не повезло :(

Судя по опубликованному вами коду, шаблон archive-courses.php
должен отображаться при посещении yoursite.com/course
. Если этого не происходит, вероятно, вы не сбросили правила перезаписи или у вас есть другие правила, которые конфликтуют с архивными правилами вашего CPT.
