※注意:
Wordpressビギナーの記事(備忘録)です。
鵜呑みにしたら想定外のことが起こるかもしれないので気をつけてください。セキュリティ的なことも考慮していません。(気づきがあれば随時補足します)
※追記:
wp-admin をイジるって対応がそもそもイケてない気がします。
その辺あまり気にしない人は、このまま読み進めてみてください。
やりたいこと
Wordpress よ、メールアドレスなしでもユーザー追加させてくれ。
対象バージョン
Wordpress 5.1.1
結論から
以下のファイルを修正する。
[wp-admin/includes/user.php]
if ( empty( $user->user_email ) ) {
// ↓をコメントアウト
$errors->add( 'empty_email', __( '<strong>ERROR</strong>: Please enter an email address.' ), array( 'form-field' => 'email' ) );
}
[wp-admin/user-new.php]
メールアドレス部分のタグから form-required を削除。「必須」の表示が気になる人は required も削除。
<!-- ↓からform-required を削除 -->
<tr class="form-field form-required">
<!-- ↓をまるごと削除 -->
<span class="description"><?php _e( '(required)' ); ?></span>
経緯
開発用のユーザーとシステム管理のユーザーを同じメールアドレスで登録しようとしたらエラーになる。
Wordpress では同じメールアドレスで複数ユーザーを登録できない。
ならば同じメールアドレスでも登録できるようにすればいいじゃない。
ということでソースを弄ることにする。
ユーザー登録周りは user.php で処理している。
メールアドレスの存在チェックは email_exists() でしてる。
function email_exists( $email ) {
$user = get_user_by( 'email', $email );
if ( $user ) {
return $user->ID;
}
return false;
}
最初は email_exists を弄るか、こいつの呼び出し元を変更しようと思ったけど、影響大きそうだからやめた。
ユーザー情報が複数とれたときの挙動の考慮とかしたくないし、email_exists の戻りのユーザーIDを一意にできない。
呼び出し元も各所に散らばってる。
ググると「Allow Multiple Accounts」ってプラグインで解決できるとのことだったけど、プラグインが見つからない。
プラグインの新規追加で検索したら普通出てくるんじゃないの?とか思いながら、出ないものはしょーがないので、自力でどうにかする。
そもそもメールアドレスを登録したいわけではないので、メールアドレスを非必須にする方針に変更。
意図的にメールアドレスを登録するなら、存在チェックもちゃんとやる。(つまり現状維持)
サーバ側(user.php)は POST されたメールアドレスがブランクだったらそもそもテーブル参照すらせずにエラーにしてるから、そこをコメントアウトするだけ。
クライアント側(user-new.php)は form-required で必須チェックが効いてるから、それを外すだけ。
これで無事、メールアドレスなしで複数ユーザー登録できました。
メールアドレスなしユーザーでのログインも問題なし。(ログインしただけだからその先は知らない)
おまけ
user.php は wp-includes/user.php と wp-admin/includes/user.php があるので注意。
最初 wp-includes/user.php しかないと思ってて、修正しても全然反映されないとか思ってハマった。