WordPressのユーザープロフィール画面のカスタマイズ

プロフィールに項目を追加する方法を整理しました。

    連絡先情報のフォームを追加

    プロフィールの「連絡先情報」の部分に追加します。

    user_contactmethods

    user_contactmethodsに配列で渡してやるだけで、項目の追加と保存処理をやってくれるので大変便利です。ただし input 要素の type 属性は text のみのようです。

    サンプルコード

    TwitterIDの項目を追加するサンプル。

    PHP
    function my_user_contactmethods( $contactmethods ) {
    	$contactmethods['twitter']   = 'Twitter';
    	return $contactmethods;
    }
    add_filter( 'user_contactmethods', 'my_user_contactmethods' );
    

    独自のフォームを追加

    プロフィールの「アカウント管理」の部分に追加します。

    ユーザー編集画面への追加

    • show_user_profileは自分のプロフィール編集画面(profile.php)
    • edit_user_profileはユーザー編集画面(user-edit.php)
    • ユーザー新規追加画面(user-new.php)にも表示させる場合はuser_new_form

    show_password_fields

    本来はユーザープロフィール画面にパスワードを表示するか否かを指定する為のフィルターフック。ここに引数として$profileuserが渡されているので、任意のテーブルを入れてやると表示される。ググると割と紹介される手法であるが、$profileuserはこの後、上記show_user_profileまたはedit_user_profileのアクションフックで実行されるものなので、直接アクションフックに追加する方が望ましい。

    show_password_fields | Hook | WordPress Developer Resources

    フォームの保存

    • 既存ユーザーの保存の場合はprofile_update
    • 新規ユーザー登録時はuser_register

    自分のプロフィールの更新時(プロフィール編集画面の表示前に発火)personal_options_update/ユーザー更新時(ユーザー編集画面の表示前に発火)edit_user_profile_updateというのもあるので、使い分けが必要な場合は代わりに使えます。

    サンプルコード

    ユーザープロフィールの編集画面に贔屓の力士の項目を追加するサンプル。

    PHP
    <?php
    function user_favarite_rikishi($user) {
    ?>
    	<table class="form-table">
    		<tr>
    			<th><label for="user_favarite_rikishi">贔屓の力士</label></th>
    			<td>
    				<input type="text" value="<?php echo esc_attr(get_user_meta($user->ID, 'favarite_rikishi', true)); ?>" name="user_favarite_rikishi" id="user_favarite_rikishi" >
    			</td>
    		</tr>
    	</table>
    <?php
    }
    add_action('show_user_profile', 'user_favarite_rikishi'); // 自分のプロフィール編集画面
    add_action('edit_user_profile', 'user_favarite_rikishi'); // ユーザー編集画面
    add_action('user_new_form', 'user_favarite_rikishi'); // ユーザー新規追加画面
    
    function save_user_favarite_rikishi($user_id) {
    	if (!current_user_can('edit_user', $user_id)) {
    			return;
    	}
    
    	update_user_meta($user_id, 'favarite_rikishi', $_REQUEST['favarite_rikishi']);
    }
    add_action('profile_update', 'user_favarite_rikishi'); // 既存ユーザーの更新
    add_action('user_register', 'user_favarite_rikishi'); // 新規ユーザーの登録
    
    シェア
    広告
    野良人 代表
    新免祥太
    1988年岡山生まれ。外食企業のWEB・EC担当を経験したのち、2013年12月より「野良人(のらんど)」の屋号で独立しWEBデザイン・プログラミングなどWEBサイト制作の工程全般を請け負っています。お気軽にご相談ください。
    <次の記事(2020/09/22)
    WordPressのアーカイブページのタイトルにspanタグが表示される
    前の記事>(2020/08/17)
    Stripeの仕様を把握する
    記事一覧