Возможности пользовательских таксономий
Я зарегистрировал несколько пользовательских таксономий для пользовательского типа записей. Код для одной из них выглядит следующим образом:
$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' к роли автора, но это решение неудовлетворительно, так как тогда все таксономии становятся доступными для редактирования авторами.
Заранее спасибо за помощь.
Так же, как и возможности пользовательских типов записей (CPT), возможности таксономий также можно настраивать в register_taxonomy():
capabilities (возможности)
- 'manage_terms' - 'manage_categories' (управление терминами)
- 'edit_terms' - 'manage_categories' (редактирование терминов)
- 'delete_terms' - 'manage_categories' (удаление терминов)
- 'assign_terms' - 'edit_posts' (назначение терминов)
Поскольку у ваших авторов есть только edit_posts, это работает так, как вы наблюдаете — они могут назначать существующие термины, но не создавать их. Вы можете настроить возможности для конкретной таксономии и дать авторам соответствующее право, чтобы они могли создавать термины в ней (но не в других таксономиях).
@vguerrero нет, вам нужно настроить права для таксономий. Таксономии и пользовательские типы записей (CPT) — это совершенно разные вещи с разными наборами прав, вы не можете управлять ими обоими только через определение CPT.
Rarst
Если я правильно понимаю, вы предлагаете определить права для пользовательского типа записей как '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
@vguerrero да, именно это я и предлагал, и не уверен, почему это не сработало в вашем случае. Вы могли бы попробовать подробнее описать, что вы пробовали, в своем вопросе.
Rarst
Ок. Это несколько неловко. Мне очень жаль. Всё из-за опечатки в слове capabilites, и я не мог её заметить, хотя бился над этим два дня. Думаю, я мог бы удалить этот пост, так как он не представляет никакого интереса. Извините за неудобства.
vguerrero
При определении возможностей (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, хотя существует множество других плагинов, которые также справятся с этой задачей.
Если кто-то окажется здесь в поисках способа изменить ранее зарегистрированную таксономию, можно использовать хук 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;
}