wp_insert_user роль не работает
Я пытаюсь сделать это весь день, но ничего не получается. Как установить роль для текущего пользователя, которого я создаю с помощью функции 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 ); // Создание пользователя

$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') ) ; // Обновление роли пользователя на 'редактор'
Если вы ищете рабочее решение, то этот вариант должен работать, и это лишь один из возможных ответов. Я осознаю, что это может быть не самое лучшее решение, возможно, даже не самое близкое к идеальному, но оно должно сработать.

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

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

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