nikolaev42 28.01.2023 15:52

Как добавить роль пользователя в Wordpress?

Добрый день! У меня возникла проблема при добавлении роли пользователя в WordPress. Я создал свою роль с помощью функции add_role(), но при попытке присвоить ей определенные возможности, они не применяются.

Вот код, который я использовал:


function custom_role() {
    add_role( 'custom_role', 'Custom Role', array(
        'read' => true,
        'edit_posts' => true,
        'delete_posts' => false
    ) );
}
add_action( 'init', 'custom_role' );

После добавления этого кода в functions.php, роль "Custom Role" появляется в списке ролей в админке, но возможности, определенные в массиве, не отрабатывают.

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

Ответы:

Grigory40Tech 28.01.2023 16:06
Возможно, проблема связана с тем, что вы добавляете роль на этапе "init". Попробуйте добавить роль на более позднем этапе и проверьте, работает ли.
Sebastian45 28.01.2023 16:31
Проверьте, правильно ли вы указали названия возможностей в массиве при создании роли пользователя.
invaren18 28.01.2023 16:40
Убедитесь, что вы правильно указываете возможности для своей роли пользователя.
eva32grishina 28.01.2023 17:02
Проверьте правильность использования функции add_role() и убедитесь, что вы правильно назначаете возможности для вашей новой роли.
SeverinaSol20 28.01.2023 17:23

Проблема, с которой вы столкнулись, связана с тем, что функция add_role() не обновляет существующие роли, а только добавляет новую роль. Поэтому, если вы пытаетесь обновить уже существующую роль, рекомендуется использовать функцию update_role().

Вот как может выглядеть исправленный код:


function custom_role() {
    $role = 'custom_role';
    $display_name = 'Custom Role';
    
    // Проверяем, существует ли уже такая роль
    if ( ! get_role( $role ) ) {
        // Если роль не существует, создаем ее
        add_role( $role, $display_name, array(
            'read' => true,
            'edit_posts' => true,
            'delete_posts' => false
        ) );
    } else {
        // Если роль уже существует, обновляем ее
        $wp_roles = wp_roles();
        $wp_roles->roles[$role]['name'] = $display_name;
        $wp_roles->roles[$role]['capabilities'] = array(
            'read' => true,
            'edit_posts' => true,
            'delete_posts' => false
        );
        $wp_roles->role_objects[$role]->capabilities = $wp_roles->roles[$role]['capabilities'];
        $wp_roles->role_objects[$role]->name = $display_name;
        $wp_roles->role_names[$role] = $display_name;
    }
}
add_action( 'init', 'custom_role' );

В этом коде мы сначала проверяем, существует ли уже роль с заданным именем. Если роль не существует, мы создаем ее с помощью функции add_role(). Если роль уже существует, мы используем функцию wp_roles() для доступа к объекту ролей и обновления настроек роли.

Надеюсь, эта информация поможет вам решить вашу проблему с добавлением роли пользователя в WordPress.


Добавить ответ