我需要通过代码添加具有管理员角色的新用户,我找到了这段代码:
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
但是当我浏览用户时,我发现此用户没有任何角色。
答案 0 :(得分:11)
这是你的错误
致命错误:在非对象上调用成员函数remove_role() 在.... / functions.php上线......
这是因为$user->remove_role( 'subscriber' );
代码,这意味着,当您使用以下代码来检索新用户时
$user = get_user_by( 'id', $user_id );
它没有返回WP_User个对象。因此,如果您在非对象上调用方法,则会显示此错误,这可能是因为您在使用
时未获得ID
$user_id = wp_create_user( $username, $password, $email );
您可能没有成功创建用户,在这种情况下,根据object
Codex
成功时 - 此函数返回已创建的用户ID 用户。如果失败(用户名或电子邮件已经存在) 函数返回一个错误对象,具有这些可能的值和 消息;
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)将删除用户的先前角色并为用户分配新角色。
详细了解Codex
上的wp create user和get user by。另外,请检查wp_generate_password()以使用安全密码而不是纯文本。
更新:
add_user是一个WordPress函数,因此将名称更改为其他内容,例如add_my_user
。
答案 1 :(得分:6)
检查以确保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' );
}
已修改:根据以下评论,似乎已创建用户。我已经更新了代码以检查它。 (实际上,现在,如果用户尚不存在,则会创建它。)
答案 2 :(得分:2)
$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 );
答案 3 :(得分:0)
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');