重要 2024年1月4日以降のドロップインのご利用につきまして

WordPressでの複数ユーザを一括登録する方法

こんにちは。制作スタッフのユウスケです。
最近女性スタッフが投稿してくれてるので、負けてはいられないと制作側からも投稿します!

今日は、WordPressのユーザ登録に関する小ネタです!
ユーザを規則的に複数作りたい!という時に、管理画面からチマチマ登録するのは手間ですよね?
じゃあデータベースを直接いじるかというと、こちらもそこまで手間は減らず…

そんな時は、PHPでさくっとコーディングしてしまいましょう。

下記コードをfunction.phpに記述してください。
すると、投稿またはページが更新・編集されたタイミングで100ユーザが一発で登録されます。
※アクションフックはサンプルとして、「edit_post」に設定しています。
 適宜変更してください。

function add_more_user() {
	global $wpdb;

	// ユーザメタ情報用配列
	$meta_arr = array(
			'first_name' => '',
			'last_name' => '',
			'description' => ''
			);

	// wp_usersテーブル用INSERT文
	$sql_ins_users = 'INSERT INTO wp_users VALUES(NULL, %s, %s, %s, %s, %s, %s, %s, 0, %s)';
	// wp_usermetaテーブル用INSERT文
	$sql_ins_meta = 'INSERT INTO wp_usermeta VALUES(NULL, %d, %s, %s)';

	$unm_head = '000';
	$ins_times = date_i18n('Y-m-d H:i:s', current_time('timestamp'));

	// 登録済みユーザIDの最大値を取得
	$uid = $wpdb->get_var("SELECT MAX(ID) FROM wp_users");

	// 100件登録
	for ($i = 1; $i <= 100; $i++) {
  		// ユーザIDをインクリメント
  		$uid++;
  		// ユーザ名を連番で生成
  		$unm = $unm_head.sprintf('%03d', $i);
  		// Hashパスワードを生成(通常登録と同じルール)
  		$pswd = wp_hash_password($unm.'sample');
  		// wp_users へ登録
  		$wpdb->query($wpdb->prepare($sql_ins_users, $unm, $pswd, $unm, '***@***', '', $ins_times, '', 0, $unm));

		// wp_usermeta へ登録
		foreach ($meta_arr as $key => $value) {
			$wpdb->query($wpdb->prepare($sql_ins_meta, $uid, $key, $value));
		}
	}
}
add_action('edit_post', 'add_more_user');

 
 
以下、上記コードを抜粋した説明です。
 
[wp_users]テーブルには、生成したユーザ名と、Hash化したパスワード、現在時刻を登録しています。

	// ユーザ名を連番で生成
	$unm = $unm_head.sprintf('%03d', $i);
	// Hashパスワードを生成(通常登録と同じルール)
	$pswd = wp_hash_password($unm.'sample');

	// wp_users へ登録
	$wpdb->query($wpdb->prepare($sql_ins_users, $unm, $pswd, $unm, '***@***', '', $ins_times, '', 0, $unm));

	// wp_usersテーブル用INSERT文
	// $sql_ins_users = 'INSERT INTO wp_users VALUES(NULL, %s, %s, %s, %s, %s, %s, %s, 0, %s)';

今回は、ユーザ名を連番にして、100ユーザ登録しています。
IDは、AUTO INCREMENT属性なので、NULLを挿入すれば自動で連番が割り振られます。
パスワードのHash化は、Wordpressで定義されている関数を使用しています。
各項目に挿入する値は、適宜変更してください。
 
 
[wp_usermeta]テーブルは、1ユーザにつきメタ項目の数だけINSERT文を実行する必要があります。
そこで、メタ項目と対応する値を連想配列に格納し、配列を回してINSERT文を実行しています。

	// ユーザメタ情報用配列
	$meta_arr = array(
			'first_name' => '',
			'last_name' => '',
			'description' => ''
			);
・・・
	// ユーザIDをインクリメント
	$uid++;
・・・
	// wp_usermeta へ登録
	foreach ($meta_arr as $key => $value) {
		$wpdb->query($wpdb->prepare($sql_ins_meta, $uid, $key, $value));
	}

	// wp_usermetaテーブル用INSERT文
	// $sql_ins_meta = 'INSERT INTO wp_usermeta VALUES(NULL, %d, %s, %s)';

こちらも、umeta_idは、AUTO INCREMENT属性なので、NULLを挿入すれば自動で連番が割り振られます。
user_id は、wp_usersへの登録前にIDの最大値を取得しており、1件登録毎にインクリメントしているので、
そちらを挿入すれば、wp_usersとwp_usermetaで正しく紐づけられます。
また、メタ情報は簡易的に上記の3つしか記述していませんが、適宜必要なものを設定してください。
変動する値の場合は、foreach文の中で値を代入すればOKです。
 
 
如何でしたでしょうか?
まあ、あまり使用する機会はないかもしれないですが、
このように、コードを数行記述すれば、メンドクサイ作業もパパッと出来ますので、ご参考にしていただければと!