wp_insert_user роль не работает

19 апр. 2016 г., 01:57:08
Просмотры: 18K
Голосов: 7

Я пытаюсь сделать это весь день, но ничего не получается. Как установить роль для текущего пользователя, которого я создаю с помощью функции wp_insert_user()?

$userdata = array(
'user_login'    =>  $username,  // Логин пользователя
'user_email'    =>  $email,     // Email пользователя
'user_pass'     =>  $password,  // Пароль
'user_url'      =>  $website,   // Веб-сайт
'first_name'    =>  $first_name, // Имя
'last_name'     =>  $last_name,  // Фамилия
'nickname'      =>  $nickname,   // Никнейм
'description'   =>  $bio,        // Описание
'role' => 'Editor'               // Роль (Редактор)
);

$user = wp_insert_user( $userdata ); // Создание пользователя
0
Все ответы на вопрос 3
6
$WP_array = array (
        'user_login'    =>  $username,  // Логин пользователя
        'user_email'    =>  $email,     // Email пользователя
        'user_pass'     =>  $password,  // Пароль пользователя
        'user_url'      =>  $website,   // Веб-сайт пользователя
        'first_name'    =>  $first_name, // Имя пользователя
        'last_name'     =>  $last_name,  // Фамилия пользователя
        'nickname'      =>  $nickname,   // Никнейм пользователя
        'description'   =>  $bio,        // Биография пользователя
    ) ;

    $id = wp_insert_user( $WP_array ) ; // Создание нового пользователя

    wp_update_user( array ('ID' => $id, 'role' => 'editor') ) ; // Обновление роли пользователя на 'редактор'

Если вы ищете рабочее решение, то этот вариант должен работать, и это лишь один из возможных ответов. Я осознаю, что это может быть не самое лучшее решение, возможно, даже не самое близкое к идеальному, но оно должно сработать.

19 апр. 2016 г. 02:12:28
Комментарии

пожалуйста, объясните ваш код

The Beast The Beast
19 апр. 2016 г. 02:13:27

Я скопировал этот код с https://wordpress.org/support/topic/wp_insert_user-does-not-apply-to-roles?replies=3 и изменю его под ваши нужды.

prosti prosti
19 апр. 2016 г. 02:15:58

но что если я хочу, чтобы это был s2member уровня 1

The Beast The Beast
19 апр. 2016 г. 02:26:46

Если у вас есть дополнительные вопросы, пожалуйста, создайте новый вопрос. Нечестно постоянно расширять рамки исходного вопроса. В вопросе ничего не упоминается о членстве в s1. @prosti, не могли бы вы отредактировать свой ответ, чтобы объяснить, что вы сделали? Просто скопированный код не является ответом и не помогает автору вопроса понять, в чем была проблема.

Tom J Nowell Tom J Nowell
19 апр. 2016 г. 06:16:45

фактически добавил еще один ответ из-за вашего отзыва @TomJNowell

prosti prosti
12 мая 2016 г. 02:48:08

@TheBeast: На самом деле уровни членства не рекомендуются к использованию, теперь следует использовать возможности (capabilities). Я дал несколько советов по этому поводу в своем втором ответе.

prosti prosti
14 мая 2016 г. 19:57:53
Показать остальные 1 комментариев
0

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

$userdata = array(
'user_login'    =>  $username,
'user_email'    =>  $email,
'user_pass'     =>  $password,
'user_url'      =>  $website,
'first_name'    =>  $first_name,
'last_name'     =>  $last_name,
'nickname'      =>  $nickname,
'description'   =>  $bio,
'role' => 'editor'
);

$user = wp_insert_user( $userdata );

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

/wp-includes/class-wp-roles.php
284:    /**
285:     * Whether role name is currently in the list of available roles.
286:     *
287:     * @since 2.0.0
288:     * @access public
289:     *
290:     * @param string $role Role name to look up.
291:     * @return bool
292:     */
293:    public function is_role( $role ) {

Вы можете проверить это самостоятельно, если напишете такой код в functions.php.

$r = new WP_Roles();
var_dump("editor", $r->is_role("editor"));
var_dump("Editor", $r->is_role("Editor"));
die();

Вы получите следующий результат.

string(6) "editor" bool(true) string(6) "Editor" bool(false) 

Это означает, что название роли editor корректно, а Editor — нет.

Важно отметить, что если вы установите пустую роль, например, 'role' => "", это приведёт к тому, что роли вообще не будут установлены (как это произошло у @TheBeast вначале с названием Editor, где в итоге роль не была установлена).

С другой стороны, если вы опустите ключ 'role', то пользователь получит роль по умолчанию. По умолчанию это обычно editor, но это можно настроить, так как эту информацию можно получить через get_option('default_role') и установить с помощью функции set_option.

В прошлом я находил указания на то, что код от @TheBeast должен был работать. (https://wordpress.org/support/topic/wp_insert_user-function-user-roles?replies=3)

Что действительно важно для нас — это процесс добавления ролей. Вы можете написать так:

add_action( 'init', 'plugin_add_role');
function plugin_add_role( 'reviewer', 'Reviewer', $caps );

Здесь ваши $caps (возможности) могут выглядеть так:

$caps = array(
        'read' => true,
        'edit_posts' => true,
        'edit_others_posts' => true,
        'edit_private_posts' => true,
        'edit_published_posts' => true,
        'read_private_posts' => true,
        'edit_pages' => true,
        'edit_others_pages' => true,
        'edit_private_pages' => true,
        'edit_published_pages' => true,
        'read_private_pages' => true,
    );

Подробнее о возможностях можно прочитать в Codex: https://codex.wordpress.org/Roles_and_Capabilities.

12 мая 2016 г. 02:47:33
0

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

'role' => 'Editor'           ------->    'role' => 'editor'

'role' => 'Shop manager'     ------->    'role' => 'shop_manager'
31 авг. 2021 г. 15:52:25