Страница архива произвольного типа записей не работает

4 июл. 2016 г., 12:06:56
Просмотры: 33.1K
Голосов: 1

Я пытаюсь создать произвольный тип записей. Все работает нормально, кроме страницы архива. Моя страница архива произвольного типа записей 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 );

Спасибо

5
Комментарии

Вы сбрасывали постоянные ссылки?

Pieter Goosen Pieter Goosen
4 июл. 2016 г. 12:25:59

Нет, я ничего не делал с постоянными ссылками.

Khandaker Ikrama Khandaker Ikrama
4 июл. 2016 г. 12:36:24

Необходимо сбрасывать постоянные ссылки при создании новой таксономии или пользовательского типа записи. Просто зайдите на страницу постоянных ссылок и нажмите сохранить/обновить.

Pieter Goosen Pieter Goosen
4 июл. 2016 г. 12:39:53

Ок. Сделано. Но проблема осталась. :(

Khandaker Ikrama Khandaker Ikrama
4 июл. 2016 г. 12:43:31

Я вижу, что упустил этот момент - нельзя использовать одинаковые правила перезаписи для типа записи и таксономии

Pieter Goosen Pieter Goosen
4 июл. 2016 г. 12:50:18
Все ответы на вопрос 2
9

Ваш тип записи 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) каждый раз, когда вы вносите подобные изменения.

4 июл. 2016 г. 12:45:28
Комментарии

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

Pieter Goosen Pieter Goosen
4 июл. 2016 г. 12:53:34

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

Khandaker Ikrama Khandaker Ikrama
4 июл. 2016 г. 13:07:33

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

majick majick
4 июл. 2016 г. 13:15:05

Просто обновите код. Пожалуйста, проверьте сейчас.

Khandaker Ikrama Khandaker Ikrama
4 июл. 2016 г. 13:28:14

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

NateWr NateWr
4 июл. 2016 г. 13:41:42

Да. Я снова сохранил постоянные ссылки, и в моем шаблоне есть класс 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, но ни одна из них не работает

Khandaker Ikrama Khandaker Ikrama
4 июл. 2016 г. 13:49:24

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

NateWr NateWr
4 июл. 2016 г. 13:53:32

Да. Наконец-то моя страница отображается. Файл taxonomy-courses_category.php работает.

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

Khandaker Ikrama Khandaker Ikrama
4 июл. 2016 г. 13:58:50

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

NateWr NateWr
4 июл. 2016 г. 15:00:24
Показать остальные 4 комментариев
3

Как сказал Pieter Goosen, вам нужно сбросить постоянные ссылки при создании новой таксономии или пользовательского типа записи. Перейдите в настройки сайта → постоянные ссылки и нажмите кнопку "сохранить".

Это сработало в моем случае.

17 дек. 2018 г. 18:27:41
Комментарии

Было бы полезно включить пример того, как вы это сделали.

butlerblog butlerblog
17 дек. 2018 г. 19:51:16

Это решило мою проблему

Walid Ammar Walid Ammar
22 сент. 2019 г. 18:14:04

это правильный способ обновить существующий URL маршрутизации

Ranjan Fadia Ranjan Fadia
14 дек. 2021 г. 13:04:21