LoginSignup
8

More than 5 years have passed since last update.

Wordpressで会員制サイトを構築してみよう(エラーテキスト、バリデーションの変更)

Posted at

ユーザー項目の変更 その2までで、とりあえず登録/ログイン/プロフィールの変更までできました。
今回は、細かな問題点を調整していきます。

元記事

下記エントリの転載になります。
WordPressで会員制サイトを構築してみよう(エラーテキスト、バリデーションの追加)

エラーメッセージの調整

会員登録ページで何も入力せずに登録ボタンを押すと、下記のようなメッセージが表示されます。

register5-1.jpg

本サイトでは「ユーザー名」を利用していないのですが、仕様上このメッセージが返るため、調整する必要があります。
また、何度も「エラー」と表示されるのは少しうるさいので、それも消してみます。

functions.php
function my_user_register_valid($errors) {
    $rep1 = array();
    $rep2 = array();

    /* エラー表記を消す例 */
    array_push($rep1, "<strong>エラー</strong>: ");
    array_push($rep2, "");
    array_push($rep1, "<strong>ERROR</strong>: ");
    array_push($rep2, "");

    /* 英語表記を変更する例 */
    array_push($rep1, "Please enter your password twice.");
    array_push($rep2, "パスワードを2回入力してください。");
    array_push($rep1, "Please enter the same password in the two password fields.");
    array_push($rep2, "パスワードは同じものを2回入力してください");

    /* ユーザー名という表記を消す例 */
    array_push($rep1, "メールアドレスを入力してください。");
    array_push($rep2, '<span class="deletedmsg"></span>');
    array_push($rep1, "ユーザー名");
    array_push($rep2, "メールアドレス");

    $custom_error = new WP_Error();
    foreach ( $errors -> errors as $key => $val ) {
        $tmp = str_replace($rep1,$rep2,$val[0]);
        $custom_error -> add($key, $tmp);
    }
    return $custom_error;
}
add_filter( 'registration_errors', 'my_user_register_valid', 10 );
style.css
.deletedmsg + br,
.deletedmsg {display:none;}

内容は、arrayに格納したテキストを置換しているだけです。
途中で "deletedmsg" というclass名を付けたHTMLを出力していますが、不要な空白が出力されてしまうのを、CSSで消しています。
※ バージョンによってもエラーの内容は変わる可能性がありますので、この部分は都度変更する必要があると思います
(この部分は つながるねっとさん を参考にしています)

プロフィール項目のバリデーション

プロフィールの項目に文字数/種の制限を設けてみます。
下記は、苗字(last_name)の最大文字数を50文字にし、「'」「"」を入力できないようにしています。

functions.php
function my_user_update_valid($errors, $update = null, $user = null) {
    /* 最大文字数 */
    $maxlength = 50;

    if(!is_admin()) {
        /* last_nameに使用できない文字を指定 */
        if ( preg_match('/[\'\"]/', $_POST['last_name']) ) {
            $errors->add('empty_last_name', '苗字に「\'」「"」は利用できません');
        } elseif (mb_strlen($_POST['last_name'], "UTF-8") > $maxlength ) {
            $errors->add('empty_last_name', '苗字は' . $maxlength . '文字以内でご入力下さい');
        }
    }
    return $errors;
}
add_action( 'user_profile_update_errors', 'my_user_update_valid', 10 );

各ユーザー項目に対して記述を増やしていけばOKです。
また、adminユーザー(管理者)のアカウントを作成するときには除外されるようになっています。

参考

下記サイト様を参考にさせていただきました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8