1. ホーム
  2. php

[解決済み] WordPressのfunctions.phpで新規ユーザーを自動作成する。

2022-02-15 17:20:45

質問

コードを使って新しいユーザーを管理者権限で追加する必要があり、次のコードを見つけました。

add_action('init', 'add_user');
function add_user() {
    $username = 'username123';
    $password = 'pasword123';
    $email = '[email protected]';

    // 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' => '[email protected]',
'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 しかし、ユーザーをブラウズすると、このユーザーは何の役割も持っていないことがわかりました。

どうすればいいですか?

これはあなたのエラーです

<ブロッククオート

致命的なエラーです。非オブジェクトのメンバー関数 remove_role() の呼び出し in .../functions.php on line ...

それは $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 = '[email protected]';
    $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() を使用すると、プレーンテキストではなく、セキュリティで保護されたパスワードを使用することができます。

更新情報

追加ユーザー はWordPressの関数なので、以下のように名前を変えてください。 add_my_user .