web-dev-qa-db-ja.com

アクティブ化されていないユーザーをコードで作成、wordpress

私はワードプレスでサイトをやっています、そして私はいくらかの助けが必要です。
ユーザーがサインアップして特別なロールを取得できるカスタム登録フォームがありますが、管理者がプラグインを介してユーザーをアクティブにするために、アクティブでないユーザーとしてデータベースに保存する必要があります。問題は、私が使っているコードはただちにデータベースをユーザーに保存し、アカウントが使えるということです。

アクティブでないユーザーとして新しいユーザーを作成する方法について何かアイデアはありますか?

$newUser = wp_create_user($un, $pw, $em);    
        if (!$newUser || is_wp_error($newUser)) {       
            $error = "[:en]Please fill in all fields.[:it]Please fill in all fields.";
        } else {
            $userinfo = array('ID'=>$newUser, 'first_name' => $fn, 'last_name' => $ln);   
            wp_update_user($userinfo);
            update_usermeta($newUser, 'company', $co);
            $user = new WP_User($newUser);
            $user->remove_role('subscriber');
            $user->add_role($tp);
            $success = "[:en]Your registration has been submitted for approval.[:it]Your registration has been submitted for approval.";
            wp_new_user_notification($newUser, $pw);
        }
2
Olsi

Wordpressには ボックスの外にアクティブ化/非アクティブ化機能がありません
これは私が追加データを持つユーザーを作成するのに役立ちました。

wp_insert_user(array(
        'user_login' => $username,
        'user_pass' => $password,
        'user_email' => $email,
        'wp_user_level' => $role,
        'show_admin_bar_front' => 'false' //you probably won't want normal users to see the admin bar
    ));

http://codex.wordpress.org/Function_Reference/wp_insert_user
まったく権限のない一時的な役割を追加してみてください。

PS。
最初にデータを検証せずに、ユーザーを直接挿入しようとしているようです。
それはそれほど安全ではありません。

1
janw

ユーザーの作成時に、作成したアカウントがアクティブ化されていないことをデータベースフィールドに書き込む必要があります。

次に、ユーザーのログイン時にそのフィールドを確認し、0(アカウントがアクティブ化されていない)の場合はユーザーをログインさせないでください。それ以外の場合は1(アカウントのアクティブ化)ログインプロセスを続行できます。

テーブル(たとえばpending_accounts)は次のようになります。

user_id | activated
  1234  |     1
   42   |     0

またはさらに良い:アクティブ化されたアカウントはそのテーブル(pending_accounts)から削除できるので、user_idが存在するかどうかを確認する必要があります。管理者によって。

管理者がアカウントをアクティブにすると、pending_accountsの対応するエントリが削除されます。

残念ながら、wordpressの内部構造とデータベースのセットアップ方法はわかりませんが、補助テーブル(pending_accounts)を簡単に作成できるはずです。

0
Paul

Usermetakey "user_status"を2にしてみてください。私はそれが一種の廃止予定であると思いますが、試すべきです。

0
Bouchaala Sabri

一般的な指示として、Idは、ただちに自分のパスワードをユーザーに電子メールで送信しないでくださいと言います。

Wp_new_user_notification関数はプラガブルなので、もしあなたがあなたの関数ファイルやプラグインに以下のようなものを追加しても、adminsはまだ新しいユーザー通知を受け取りますが、ユーザー自身はしません。

if ( !function_exists('wp_new_user_notification') ) :
/**
 * Notify the blog admin of a new user, normally via email.
 *
 * @since 2.0
 *
 * @param int $user_id User ID
 * @param string $plaintext_pass Optional. The user's plaintext password
 */
function wp_new_user_notification($user_id, $plaintext_pass = '') {
    $user = new WP_User($user_id);

    $user_login = stripslashes($user->user_login);
    $user_email = stripslashes($user->user_email);

    // The blogname option is escaped with esc_html on the way into the database in sanitize_option
    // we want to reverse this for the plain text arena of emails.
    $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

    $message  = sprintf(__('New user registration on your site %s:'), $blogname) . "\r\n\r\n";
    $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
    $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

    @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), $blogname), $message);

}
endif;

把握するために残された唯一のステップは、どのようにしてユーザーを「アクティブにする」か(彼らにパスワードを送る)です。ユーザーの承認ワークフローに応じて、ユーザーのパスワードをランダムなものにリセットし、それを電子メールで送信する機能を作成することができます。その後、この機能をユーザー一覧画面のボタンにフックすることができます。

このアプローチ全体の欠点は、どのユーザーが「非アクティブ」であるかを見分けるのが難しいことです(まだパスワードをEメールで送信されていない)。これについては、default_password_nagユーザーオプション、または登録時に設定したカスタムユーザーオプションで返信できます。

0
MathSmath