Отображение таксономий пользовательского типа записей как архивной страницы

4 авг. 2017 г., 19:59:38
Просмотры: 19.1K
Голосов: 3

У меня есть пользовательский тип записей под названием 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

Заранее спасибо

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

вы установили его как result-category при регистрации таксономии, измените это на results/categories

Milo Milo
4 авг. 2017 г. 20:19:37

в первой или второй функции?

cup_of cup_of
4 авг. 2017 г. 20:32:36
Все ответы на вопрос 1
0

Ваши желаемые URL:

www.example.com/results/post-name/
www.example.com/results/categories/category-name/

Два изменения по сравнению с исходным кодом:

  1. Добавлен приоритет для обоих хуков add_action, чтобы изменить порядок их выполнения. Порядок важен в данном случае, потому что правила перезаписи вложений типа записи переопределяют правила перезаписи таксономий. Побочный эффект: URL вложений не работают для этого типа записи!

  2. Перезапись для таксономии изменена на 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.

4 авг. 2017 г. 21:58:24