Создание категорий только для пользовательского типа записей

16 нояб. 2014 г., 21:51:02
Просмотры: 55.4K
Голосов: 16

Всем привет, Я создаю свой собственный тип записей, используя следующий код:

add_action( 'init', 'create_team_post_type' );
function create_team_post_type() {
  register_post_type( 'team',
    array(
      'labels' => array(
        'name' => __( 'Teams' ),
        'singular_name' => __( 'Team' )
      ),
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'taxonomies' => array('category'),
        'supports' => array('title','editor','thumbnail')
    )
  );
}

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

0
Все ответы на вопрос 1
5
22

Я бы сказал, что вам также нужно создать пользовательскую таксономию, если вы хотите ограничить её только одним типом записи. "Категории" по умолчанию уже связаны с записями.

Из WordPress Codex

function people_init() {
    // создаём новую таксономию
    register_taxonomy(
        'people',
        'post',
        array(
            'label' => __( 'Люди' ),
            'rewrite' => array( 'slug' => 'person' ),
            'capabilities' => array(
                'assign_terms' => 'edit_guides',
                'edit_terms' => 'publish_guides'
            )
        )
    );
}
add_action( 'init', 'people_init' );

Таким образом, если вы назовёте её "team-category", вы сможете использовать это в массиве 'taxonomies' вашего типа записи.

Более конкретный пример:

function tr_create_my_taxonomy() {

    register_taxonomy(
        'team-category',
        'team',
        array(
            'label' => __( 'Категория' ),
            'rewrite' => array( 'slug' => 'team-category' ),
            'hierarchical' => true,
        )
    );
}
add_action( 'init', 'tr_create_my_taxonomy' );
16 нояб. 2014 г. 22:09:22
Комментарии

Выглядит хорошо. Как мне отобразить мою пользовательскую таксономию в пользовательском типе записи? Я попытался изменить 'taxonomies' => array('category') на 'taxonomies' => array('people'), но это не отображает эти категории.

user1048676 user1048676
16 нояб. 2014 г. 22:20:17

Убедитесь, что вы заменили 'post' на 'team' в примере кода, если именно там вы хотите, чтобы это отображалось.

SkyShab SkyShab
16 нояб. 2014 г. 22:24:17

Пожалуй, мне стоит быть более понятным. Это отображается там, но когда я добавляю новую запись в пользовательском типе записи, я хочу, чтобы это показывалось в виде чекбоксов, как в стандартном типе записи. Сейчас мне показывается просто поле, как для меток, вместо пользовательских категорий.

user1048676 user1048676
16 нояб. 2014 г. 22:28:19

Если вам нужен стиль категорий, установите hierarchical в true. По умолчанию false отображает его в стиле меток. Я добавил первый вариант в свой последний пример кода.

SkyShab SkyShab
16 нояб. 2014 г. 22:37:03

Чтобы отобразить пользовательскую таксономию в редакторе страниц Gutenberg, добавьте 'show_in_rest' => true в параметры register_taxonomy.

Fabian von Ellerts Fabian von Ellerts
15 нояб. 2019 г. 12:45:36