WordPressのユーザープロフィール画面のカスタマイズ
2020/08/25
プロフィールに項目を追加する方法を整理しました。
連絡先情報のフォームを追加
プロフィールの「連絡先情報」の部分に追加します。
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_user_profile | Hook | WordPress Developer Resources
- edit_user_profile | Hook | WordPress Developer Resources
- user_new_form | Hook | WordPress Developer Resources
show_password_fields
本来はユーザープロフィール画面にパスワードを表示するか否かを指定する為のフィルターフック。ここに引数として$profileuser
が渡されているので、任意のテーブルを入れてやると表示される。ググると割と紹介される手法であるが、$profileuser
はこの後、上記show_user_profile
またはedit_user_profile
のアクションフックで実行されるものなので、直接アクションフックに追加する方が望ましい。
フォームの保存
- 既存ユーザーの保存の場合は
profile_update
- 新規ユーザー登録時は
user_register
- profile_update | Hook | WordPress Developer Resources
- user_register | Hook | WordPress Developer Resources
自分のプロフィールの更新時(プロフィール編集画面の表示前に発火)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'); // 新規ユーザーの登録
広告
2020/08/25