programing

기능을 통해 자동으로 새 사용자를 생성합니다.WordPress의 php

testmans 2023. 3. 16. 21:15
반응형

기능을 통해 자동으로 새 사용자를 생성합니다.WordPress의 php

코드를 통해 관리자 역할을 가진 새 사용자를 추가해야 하는데 다음 코드를 발견했습니다.

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의 비개체에 있는 멤버 함수 remove_role()을 호출합니다.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)은 사용자의 이전 역할을 삭제하고 새 역할을 사용자에게 할당합니다.wp create user and get user by on에 대한 자세한 내용은 이쪽Codex또한 wp_generate_password()를 체크하여 일반 텍스트 대신 안전한 비밀번호를 사용합니다.

업데이트:

add_user는 WordPress 함수이므로 이름을 다음과 같이 변경합니다.add_my_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');

언급URL : https://stackoverflow.com/questions/19845192/create-new-user-automatically-via-functions-php-in-wordpress

반응형