Возможности настраиваемых таксономий

Вопрос или проблема

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

$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 — это важный шаг для обеспечения успешной работы вашего контента и управления доступом пользователей. Определив новые возможности и назначив их ролям, вы получите гибкость в управлении данными и смягчите ограничения, которые могут возникнуть при использовании стандартных возможностей. Надеемся, что данное руководство поможет вам в эффективной настройке настраиваемых таксономий в вашем проекте.

Оцените материал
Добавить комментарий

Капча загружается...