Вопрос или проблема
Я зарегистрировал несколько пользовательских таксономий для пользовательского типа записи. Код для одной из них следующий:
$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()
:
возможности
- ‘manage_terms’ – ‘manage_categories’
- ‘edit_terms’ – ‘manage_categories’
- ‘delete_terms’ – ‘manage_categories’
- ‘assign_terms’ – ‘edit_posts’
Поскольку у ваших авторов только edit_posts
, это работает так, как вы наблюдаете — они могут назначать существующие термины, но не создавать их. Вы можете настроить возможности для соответствующей таксономии и предоставить соответствующую возможность авторам, чтобы они могли создавать термины в ней (но не в других таксономиях).
Когда вы определяете возможности при регистрации таксономии, вы определяете новые возможности, которые равны существующим возможностям manage_terms
edit_terms
delete_terms
и assign_terms
.
Поэтому вам следует сделать что-то вроде этого, поскольку ваша таксономия — это Жанр
:
'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;
}
Ответ или решение
Возможности настраиваемых таксономий в WordPress
На сегодняшний день многие разработчики WordPress используют настраиваемые таксономии для лучшей организации контента. Они позволяют не просто структурировать данные, но и контролировать доступ различных ролей пользователей к управлению этими данными через настройку возможностей (capabilities). В данной статье мы рассмотрим, как правильно настроить возможности для настраиваемых таксономий, чтобы обеспечить нужный уровень доступа для различных ролей пользователей, в частности для авторов.
Настройка меток и параметров таксономии
При регистрации настраиваемой таксономии в WordPress важно определить метки и параметры ее работы. Рассмотрим на примере таксономии "Genre":
$labels = array(
'name' => __( 'Genre', 'textdomain' ),
'singular_name' => __( 'Genre', 'textdomain' ),
'search_items' => __( 'Search Genres', 'textdomain' ),
'all_items' => __( 'All Genres', 'textdomain' ),
'parent_item' => __( 'Parent Genre', 'textdomain' ),
'parent_item_colon' => __( 'Perent Genre:', 'textdomain' ),
'edit_item' => __( 'Edit Genre', 'textdomain' ),
'update_item' => __( 'Update Genre', 'textdomain' ),
'add_new_item' => __( 'Add New Genre', 'textdomain' ),
'new_item_name' => __( 'New Genre', 'textdomain' ),
'menu_name' => __( 'Genres', 'textdomain' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'show_admin_column' => true,
'show_ui' => true,
'hierarchical' => true,
'capabilities' => array(
'manage_terms' => 'manage_genre',
'edit_terms' => 'edit_genre',
'delete_terms' => 'delete_genre',
'assign_terms' => 'assign_genre'
)
);
register_taxonomy( 'genres', 'book', $args );
В этом коде мы создали метки и указали, что таксономия будет иерархичной. Главным моментом здесь является правильная настройка возможностей.
Правильная настройка возможностей
Как было отмечено, использование стандартного значения 'manage_terms' => 'edit_posts'
может создать проблемы для авторов, которые не имеют права на создание новых терминов. Для корректной работы настоятельно рекомендуется создать новые возможности для вашей таксономии и затем назначить их соответствующим ролям.
'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 ) {
if ( 'genres' === $taxonomy ) {
$args['capabilities'] = array(
'manage_terms' => 'manage_genre',
'edit_terms' => 'edit_genre',
'delete_terms' => 'delete_genre',
'assign_terms' => 'assign_genre',
);
}
return $args;
}
Заключение
Правильная настройка возможностей для настраиваемых таксономий в WordPress — это важный шаг для обеспечения успешной работы вашего контента и управления доступом пользователей. Определив новые возможности и назначив их ролям, вы получите гибкость в управлении данными и смягчите ограничения, которые могут возникнуть при использовании стандартных возможностей. Надеемся, что данное руководство поможет вам в эффективной настройке настраиваемых таксономий в вашем проекте.