2022.03.14

WordPress管理画面でユーザーのプロフィール更新時にメールアドレスのエラー判定を外す方法

こんにちは、webエンジニアのゾノ( @ozonosho )です。

今回の記事ではWordPress管理画面でユーザーのプロフィール更新時にメールアドレスのエラー判定を外す方法をご紹介いたします。

よくあるケースとしては「メールアドレス不要で登録できるようにしたい」という理由で使われる方法かもしれません。

僕の場合は「メールアドレスを暗号化した際に既存のエラー判定だと弾かれてしまうので回避したい」という理由から対応しました。

WordPressのユーザーテーブルはメールアドレスがそのまま入る作りになっているため、万が一DBに不正アクセスされてしまうとすべてのメールアドレスが丸見えです。

こういった事情から、セキュリティ意識の高い企業や重要度の高い個人情報を扱っている企業の場合、メールアドレスや個人情報を暗号化してからDBに保存するケースがあります。その際には今回の方法が役に立ちます。

プロフィール更新時にメールアドレスのエラー判定を外す方法

実装は簡単で下記コードをfunctions.phpに追加するだけです。

//メールアドレスのエラー判定を外す
function remove_user_mail_update_errors($errors, $update, $user) {
  $errors->remove('empty_email'); //空白チェックを回避
  $errors->remove('invalid_email'); //形式チェックを回避
}
add_action('user_profile_update_errors', 'remove_user_mail_update_errors', 10, 3);

知ってしまえば簡単なのですが、レアな対応なので「user_profile_update_errors」というフックの存在にたどり着くのに若干時間がかかりました。

このフックを利用することで、プロフィール更新時に任意のバリデーションを外したり、(今回は当てはまりませんが)任意のバリデーションを追加したりすることができます。

尚、メールアドレスを暗号化した場合、バリデーションを通過しても正しくメールアドレスが上書きされないので下記の処理も追加します。

//プロフィール更新時に暗号化メールアドレスが消えないように上書きする
function set_ssl_email_profile_update($user_id, $old_user_data) {
  global $wpdb;
  $query = $wpdb->prepare("UPDATE ".$wpdb->prefix."users SET user_email = %s WHERE ID = %d", $old_user_data->user_email, $user_id);
  $wpdb->query($query);
}
add_action('profile_update', 'set_ssl_email_profile_update', 10, 2);

これでプロフィール更新後に元の暗号化アドレスを再登録することができます。

おわりに

以上、今回の記事でWordPress管理画面でユーザーのプロフィール更新時にメールアドレスのエラー判定を外す方法を紹介させていただきました。

当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。

あなたのサイトに理想の機能を実装!WordPressカスタマイズサービス

本サービスはあなたのWordPressサイトに理想の機能を実装するサービスとなります。 どのような機能・要望でも実現可能です! Wo......

→この記事を読む