Возможности пользовательских таксономий

24 июл. 2014 г., 12:16:31
Просмотры: 17.9K
Голосов: 10

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

$labels = array(
    'name'              => __( 'Жанр', 'textdomain' ),
    'singular_name'     => __( 'Жанр', 'textdomain' ),
    'search_items'      => __( 'Поиск жанров', 'textdomain' ),
    'all_items'         => __( 'Все жанры', 'textdomain' ),
    'parent_item'       => __( 'Родительский жанр', 'textdomain' ),
    'parent_item_colon' => __( 'Родительский жанр:', 'textdomain' ),
    'edit_item'         => __( 'Редактировать жанр', 'textdomain' ), 
    'update_item'       => __( 'Обновить жанр', 'textdomain' ),
    'add_new_item'      => __( 'Добавить новый жанр', 'textdomain' ),
    'new_item_name'     => __( 'Новый жанр', 'textdomain' ),
    'menu_name'         => __( 'Жанры', 'textdomain' ),
);
$args = array(
    'labels'            => $labels,
    'public'            => true,
    'show_admin_column' => true,
    'show_ui'           => true,
    'hierarchical'      => true,
    'capabilities'      => array(
        'manage_terms'  => 'edit_posts',
        'edit_terms'    => 'edit_posts',
        'delete_terms'  => 'edit_posts',
        'assign_terms'  => 'edit_posts'
    )
);
register_taxonomy( 'genres', 'book', $args );

У меня возникли проблемы с правами доступа, так как я хочу, чтобы одной из пользовательских таксономий могли управлять авторы.

Если я определяю возможности, как в коде выше ('manage_terms' => 'edit_posts'), авторам не разрешается добавлять новые термины в пользовательскую таксономию, даже если у них есть право edit_posts.

Я также пробовал добавлять пользовательские права для роли автора и назначать эти права при регистрации пользовательской таксономии, но без успеха.

Что действительно работает - это добавление 'manage_categories' к роли автора, но это решение неудовлетворительно, так как тогда все таксономии становятся доступными для редактирования авторами.

Заранее спасибо за помощь.

1
Все ответы на вопрос 3
6

Так же, как и возможности пользовательских типов записей (CPT), возможности таксономий также можно настраивать в register_taxonomy():

capabilities (возможности)

  • 'manage_terms' - 'manage_categories' (управление терминами)
  • 'edit_terms' - 'manage_categories' (редактирование терминов)
  • 'delete_terms' - 'manage_categories' (удаление терминов)
  • 'assign_terms' - 'edit_posts' (назначение терминов)

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

24 июл. 2014 г. 12:30:32
Комментарии

@vguerrero нет, вам нужно настроить права для таксономий. Таксономии и пользовательские типы записей (CPT) — это совершенно разные вещи с разными наборами прав, вы не можете управлять ими обоими только через определение CPT.

Rarst Rarst
24 июл. 2014 г. 12:50:40

Если я правильно понимаю, вы предлагаете определить права для пользовательского типа записей как 'capabilites' => array( 'manage_terms' => 'manage_custom_tax', 'edit_terms' => 'manage_custom_tax', 'delete_terms' => 'manage_custom_tax', 'assign_terms' => 'edit_posts') и затем добавить 'manage_custom_tax' к роли автора. Я пробовал это до создания этого поста и попробовал снова, но без успеха. Думаю, я вас не до конца понимаю. Буду признателен за более подробное объяснение или пример. Спасибо.

vguerrero vguerrero
24 июл. 2014 г. 12:53:52

Извините, я написал "пользовательский тип записей", но имел в виду пользовательскую таксономию.

vguerrero vguerrero
24 июл. 2014 г. 13:01:40

@vguerrero да, именно это я и предлагал, и не уверен, почему это не сработало в вашем случае. Вы могли бы попробовать подробнее описать, что вы пробовали, в своем вопросе.

Rarst Rarst
24 июл. 2014 г. 13:08:17

Ок. Это несколько неловко. Мне очень жаль. Всё из-за опечатки в слове capabilites, и я не мог её заметить, хотя бился над этим два дня. Думаю, я мог бы удалить этот пост, так как он не представляет никакого интереса. Извините за неудобства.

vguerrero vguerrero
24 июл. 2014 г. 18:49:11

У меня проблема с таксономией hierarchical' => false, хотя меню исчезло, пользователь всё равно может создавать теги, вводя всё, что ему вздумается, в поле тегов, разделённых запятыми :/

Fanky Fanky
5 авг. 2022 г. 12:34:28
Показать остальные 1 комментариев
0

При определении возможностей (capabilities) при регистрации таксономии вы создаёте новые права, которые соответствуют существующим возможностям: manage_terms, edit_terms, delete_terms и assign_terms.

Поскольку ваша таксономия называется Genre, вам следует сделать следующее:

'capabilities' => array(
    'manage_terms' => 'manage_genre',
    'edit_terms' => 'edit_genre',
    'delete_terms' => 'delete_genre',
    'assign_terms' => 'assign_genre',
)

После этого вы сможете назначить эти права определённым ролям пользователей. Самый простой способ (и мой предпочтительный) — использовать плагин, например Capability Manager Enhanced, хотя существует множество других плагинов, которые также справятся с этой задачей.

14 окт. 2016 г. 00:14:00
0

Если кто-то окажется здесь в поисках способа изменить ранее зарегистрированную таксономию, можно использовать хук register_taxonomy_args.

add_filter( 'register_taxonomy_args', 'modify_my_taxonomy', 20, 2 );
function modify_my_taxonomy( $args, $taxonomy ) {
    $capabilities = array(
        'manage_terms' => 'edit_posts', // управление терминами
        'edit_terms'   => 'edit_posts', // редактирование терминов
        'delete_terms' => 'edit_posts', // удаление терминов
        'assign_terms' => 'edit_posts', // назначение терминов
    );

    
    if ( 'my-tax' === $taxonomy ) {
        $args['capabilities'] = $capabilities;
    } 

    return $args;

}
21 нояб. 2024 г. 22:23:43