Создайте неактивного пользователя в коде, wordpress

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

Любые идеи о том, как создать нового пользователя как не активированного?

$newUser = wp_create_user($un, $pw, $em); if (!$newUser || is_wp_error($newUser)) { $error = "[:en]Please fill in all fields.[:it]Please fill in all fields."; } else { $userinfo = array('ID'=>$newUser, 'first_name' => $fn, 'last_name' => $ln); wp_update_user($userinfo); update_usermeta($newUser, 'company', $co); $user = new WP_User($newUser); $user->remove_role('subscriber'); $user->add_role($tp); $success = "[:en]Your registration has been submitted for approval.[:it]Your registration has been submitted for approval."; wp_new_user_notification($newUser, $pw); } 

Solutions Collecting From Web of "Создайте неактивного пользователя в коде, wordpress"

WordPress не имеет активной / деактивирующей функции из коробки
Это помогло мне создать пользователей с дополнительными данными.

 wp_insert_user(array( 'user_login' => $username, 'user_pass' => $password, 'user_email' => $email, 'wp_user_level' => $role, 'show_admin_bar_front' => 'false' //you probably won't want normal users to see the admin bar )); 

http://codex.wordpress.org/Function_Reference/wp_insert_user
Попробуйте добавить временную роль без каких-либо прав.

PS.
Я вижу, вы прямо пытаетесь вставить пользователя, не подтверждая сначала свои данные.
Это не очень безопасно.

При создании пользователя вы должны записать в поле базы данных тот факт, что созданная учетная запись не активирована.

Затем при регистрации пользователя вы должны проверить это поле, если оно говорит 0 (учетная запись не активирована), вы не должны позволять пользователю входить в систему, иначе если он говорит 1 (активирована учетная запись), вы можете продолжить процесс регистрации.

Таблица (скажем, pending_accounts ) должна выглядеть так:

 user_id | activated 1234 | 1 42 | 0 

Или даже лучше: активированные учетные записи могут быть удалены из этой таблицы ( pending_accounts ), поэтому вам нужно будет проверить, существует ли там user_id , если она существует, что означает, что учетная запись не была активирована администратором.

Когда администратор активирует учетную запись, соответствующая запись из pending_accounts удаляется.

К сожалению, я не знаю внутренней структуры WordPress и того, как она настраивает базу данных, но создать вспомогательную таблицу ( pending_accounts ) было бы легко.

Попытайтесь поставить usermetakey «user_status» равным 2. Я думаю, что это своего рода устаревшее, но вы должны попробовать.

Очень легкий и умный:

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

легкое и умное и почти нулевое кодирование: D

Как правило, Id говорит, что просто не отправляйте по электронной почте пользователю свой пароль сразу.

Функция wp_new_user_notification подключается, поэтому если вы добавите что-то вроде следующего в ваш файл функций или в плагин, администраторы все равно получат новые уведомления пользователей, но сами пользователи этого не сделают.

 if ( !function_exists('wp_new_user_notification') ) : /** * Notify the blog admin of a new user, normally via email. * * @since 2.0 * * @param int $user_id User ID * @param string $plaintext_pass Optional. The user's plaintext password */ function wp_new_user_notification($user_id, $plaintext_pass = '') { $user = new WP_User($user_id); $user_login = stripslashes($user->user_login); $user_email = stripslashes($user->user_email); // The blogname option is escaped with esc_html on the way into the database in sanitize_option // we want to reverse this for the plain text arena of emails. $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); $message = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n"; @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message); } endif; 

Единственный шаг, который нужно выяснить, – как вы «активируете» пользователей (отправляете им свой пароль). В зависимости от рабочего процесса утверждения пользователя вы можете создать функцию, которая сбрасывает пароль пользователя на что-то случайное и отправляет его по электронной почте. Затем вы можете подключить эту функцию к кнопке на экране списка пользователей.

Недостатком всего этого подхода является то, что трудно сказать, какие пользователи «неактивны» (еще не были отправлены по электронной почте пароль). Для этого вы можете ответить на параметр пользователя default_password_nag или пользовательский параметр, который вы установили при регистрации, я полагаю.