10

我需要通过代码添加具有管理员角色的新用户,我找到了这段代码:

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但是当我浏览用户时,我发现这个用户没有任何角色。

4

4 回答 4

13

这是你的错误

致命错误:在 ..../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 );

您可能没有成功创建用户,在这种情况下,返回值可能是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)将删除用户以前的角色并为用户分配新角色。阅读更多关于wp create userget user by on Codex。此外,检查wp_generate_password()以使用安全密码而不是纯文本。

更新 :

add_user是一个 WordPress 函数,因此请将名称更改为其他名称,例如add_my_user.

于 2013-11-07T20:11:30.063 回答
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' );
}

已编辑:根据下面的评论,用户似乎已经创建。我已经更新了代码来检查它。(本质上,现在,如果用户不存在,它将被创建。)

参考

于 2013-11-07T20:00:13.723 回答
3
$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 );
于 2015-02-04T08:29:20.253 回答
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');
于 2019-01-09T11:42:31.387 回答