WP-Members:ユーザーの登録時にdisplay_nameを自動で設定する方法

WordPressの標準の動作では、ユーザー登録時にusernameが自動的にdisplay_nameとして設定されます。
以前の記事でも書いたんですが、このusernameが曲者で、英数字しか登録できないため、日本人にとってはいわゆる「ユーザーの名前」としては使えません。

WP-Membersを使っている場合、ちょっとしたコードの追加でdisplay_nameをusername以外のものに変更することができます。
今回はその方法を説明しますね。

簡単にdisplay_nameを設定する方法

wp-members\inc\register.phpに以下のような記述があります。

/*
 * These native fields are not installed by default, but if they
 * are added, use the $_POST value - otherwise, default to username.
 * Value can be filtered with wpmem_register_data.
 */
$fields['user_nicename']   = ( isset( $_POST['user_nicename'] ) ) ? sanitize_title( $_POST['user_nicename'] ) : $fields['username'];
$fields['display_name']    = ( isset( $_POST['display_name'] ) )  ? sanitize_user ( $_POST['display_name']  ) : $fields['username'];
$fields['nickname']        = ( isset( $_POST['nickname'] ) )      ? sanitize_user ( $_POST['nickname']      ) : $fields['username'];

/**
 * Filter registration data after validation before data insertion.
 *
 * @since 2.8.2
 *
 * @param array  $fields An array of the registration field data.
 * @param string $toggle A switch to indicate the action (new|edit).
 */
$fields = apply_filters( 'wpmem_register_data', $fields, 'new' ); 

何をしているかというと、ユーザー登録時の入力項目に’user_nicename’や’display_name’そして’nickname’があれば、それらを優先的に登録してくれる設定をしています。

ということで一番簡単なのは、登録画面に’display_name’を作成することになります。
これはWordPressの管理画面の設定メニューからWp-Membersをクリックし、開いた設定画面でフィールドタブをクリックし、下の方にある”Add a Field”で以下の様に設定すれば作成できます。
setting
※ラベルは何でも結構です。

そしてこれがユーザー登録画面となります。
register
※「ユーザー名」ラベルは「ログインID(英数字のみ)」ラベルに別のテクニックで変更しています。このテクニックは後日方法を書くかも。

以下の内容で登録してみます。
register

登録後のユーザーを確認すると、display_nameを示すブログ上の表示名が「ヨンイチワイ太郎」と設定されていることが確認できます。
user_info

名前(first_name)や姓(last_name)をdisplay_nameに設定するには

しかし、せっかく名前(first_name)や姓(last_name)を登録するので、それをdisplay_nameに設定したいという場合もあると思います。
その場合はfunctions.phpに以下のようなコードを追加することで対応が可能です。

// ユーザー登録時にlast_nameとfirst_nameをdisplay_nameにセットする
function set_display_name( $inputs ) {
    $inputs['display_name'] = $inputs['last_name'].$inputs['first_name'];
    return $inputs;
}
add_filter( 'wpmem_register_data', 'set_display_name', 2 );

以下の内容で登録してみます。
register

登録後のユーザーを確認すると、display_nameを示すブログ上の表示名が姓と名を使って設定されていることが確認できます。
user_info

まとめ

いかがでしたでしょうか?
会員サイトを作っていると、ユーザー名を表示させたい場面が多いのですが、この方法を使うとユーザーに面倒な登録や設定の変更を強いることなく、display_nameが設定できますね。

少しでもお役に立ちましたら、シェアしていただけると嬉しいです。