[英]Create new user automatically via functions.php in WordPress
我需要通過代碼添加具有管理員角色的新用戶,我找到了這段代碼:
add_action('init', 'add_user');
function add_user() {
$username = 'username123';
$password = 'pasword123';
$email = 'drew@example.com';
// Create the new user
$user_id = wp_create_user( $username, $password, $email );
// Get current user object
$user = get_user_by( 'id', $user_id );
// Remove role
$user->remove_role( 'subscriber' );
// Add role
$user->add_role( 'administrator' );
}
但是當我在functions.php
添加它時,我收到了這個錯誤:
Fatal error: Call to a member function remove_role()
on a non-object in ..../functions.php on line ...
我也試過這段代碼:
function fb_wp_insert_user() {
$user_data = array(
'ID' => '',
'user_pass' => wp_generate_password(),
'user_login' => 'dummy',
'user_nicename' => 'Dummy',
'user_url' => '',
'user_email' => 'dummy@example.com',
'display_name' => 'Dummy',
'nickname' => 'dummy',
'first_name' => 'Dummy',
'user_registered' => '2010-05-15 05:55:55',
'role' => get_option('default_role') // Use default role or another role, e.g. 'editor'
);
$user_id = wp_insert_user( $user_data );
}
add_action( 'admin_init', 'fb_wp_insert_user' );
我將默認角色更改為adminstrator
但是當我瀏覽用戶時,我發現此用戶沒有任何角色。
這是你的錯誤
致命錯誤:在.... / functions.php中的非對象上調用成員函數remove_role()...
這是因為$user->remove_role( 'subscriber' );
代碼,這意味着,當您使用以下代碼來檢索新用戶時
$user = get_user_by( 'id', $user_id );
它沒有返回WP_User對象。 因此,如果您在非對象上調用方法,則會顯示此錯誤,這可能是因為您在使用時未獲取ID
$user_id = wp_create_user( $username, $password, $email );
您可能沒有成功創建用戶,在這種情況下,返回值可能是根據Codex
的object
成功時 - 此函數返回已創建用戶的用戶標識。 如果失敗(用戶名或電子郵件已經存在),該函數將返回一個錯誤對象,包含這些可能的值和消息;
empty_user_login,無法創建具有空登錄名的用戶。
existing_user_login,此用戶名已經注冊。
existing_user_email,此電子郵件地址已注冊。
因此,在創建用戶時,首先要檢查用戶是否存在
add_action('init', 'add_my_user');
function add_my_user() {
$username = 'username123';
$email = 'drew@example.com';
$password = 'pasword123';
$user_id = username_exists( $username );
if ( !$user_id && email_exists($email) == false ) {
$user_id = wp_create_user( $username, $password, $email );
if( !is_wp_error($user_id) ) {
$user = get_user_by( 'id', $user_id );
$user->set_role( 'administrator' );
}
}
}
此外,不需要重新設置和添加角色, set_role($ role)將刪除用戶的先前角色並為用戶分配新角色。 閱讀有關wp create user的更多信息,並通過 Codex
獲取用戶 。 另外,檢查wp_generate_password()以使用安全密碼而不是純文本。
更新:
add_user是一個WordPress函數,因此將名稱更改為add_my_user
等其他名稱。
檢查以確保wp_create_user()
實際創建了用戶:
add_action('init', 'add_user');
function add_user() {
$username = 'username123';
$password = 'pasword123';
$email = 'drew@example.com';
$user = get_user_by( 'email', $email );
if( ! $user ) {
// Create the new user
$user_id = wp_create_user( $username, $password, $email );
if( is_wp_error( $user_id ) ) {
// examine the error message
echo( "Error: " . $user_id->get_error_message() );
exit;
}
// Get current user object
$user = get_user_by( 'id', $user_id );
}
// Remove role
$user->remove_role( 'subscriber' );
// Add role
$user->add_role( 'administrator' );
}
編輯 :根據下面的評論,似乎已經創建了用戶。 我已經更新了代碼以檢查它。 (實質上,現在,如果用戶尚不存在,則會創建它。)
$userData = array(
'user_login' => 'username',
'first_name' => 'First',
'last_name' => 'Last',
'user_pass' => 'password',
'user_email' => 'you@mail.com',
'user_url' => '',
'role' => 'administrator'
);
wp_insert_user( $userData );
function kechweb_create_admin_account(){
$user = 'Username'; <br />
$pass = 'Password';<br />
$email = 'email@domain.com';<br />
//if a username with the email ID does not exist, create a new user account<br />
if ( !username_exists( $user ) && !email_exists( $email ) ) {<br />
$user_id = wp_create_user( $user, $pass, $email ); <br />
$user = new WP_User( $user_id ); <br />
//Set the new user as a Admin <br />
$user->set_role( 'administrator' ); <br />
} } <br />
add_action('init','kechweb_create_admin_account');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.