概要説明
WordPress のユーザーのプロフィールの編集画面に、所属店舗などの項目を足して保存・表示する functions.php のコード。権限の確かめ・sanitize_text_field・表示のときの esc_html と、前の表示の例が何も出なかった理由(echo がない)も、作業環境で確かめた結果つきで。
コード:プロフィールに「所属店舗」の項目を足す
スタッフの紹介のページなどで、ユーザーごとに「所属店舗」のような項目を持たせたいときは、プロフィールの編集画面に項目を足します。値はユーザーごとの保存場所(user meta)に入れます。
functions.php
/**
* ユーザーの編集画面に「所属店舗」の項目を足す
*/
function my_user_branch_field( $user ) {
?>
<h2>追加の情報</h2>
<table class="form-table">
<tr>
<th><label for="branch">所属店舗</label></th>
<td><input type="text" name="branch" id="branch" value="<?php echo esc_attr( get_user_meta( $user->ID, 'branch', true ) ); ?>" class="regular-text"></td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'my_user_branch_field' ); // 自分のプロフィール
add_action( 'edit_user_profile', 'my_user_branch_field' ); // ほかのユーザーの編集
function my_user_branch_save( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) || ! isset( $_POST['branch'] ) ) {
return;
}
update_user_meta( $user_id, 'branch', sanitize_text_field( wp_unslash( $_POST['branch'] ) ) );
}
add_action( 'personal_options_update', 'my_user_branch_save' ); // 自分のプロフィールを保存したとき
add_action( 'edit_user_profile_update', 'my_user_branch_save' ); // ほかのユーザーを保存したとき
| 書き方 | 役目 |
|---|---|
| show_user_profile・edit_user_profile | 自分のプロフィールの画面と、ほかのユーザーの編集画面に項目を出す |
| personal_options_update・edit_user_profile_update | それぞれの画面で保存したときに動く |
current_user_can( 'edit_user', … ) |
そのユーザーを編集できる人のときだけ保存する |
isset( $_POST['branch'] ) |
項目が送られてこないときは何もしない(警告も出さない) |
| sanitize_text_field | タグや改行を取り除いて、1 行の文字にしてから保存する |
足した項目を表示する
テンプレート(author.php など)
<?php
// 投稿者のページ(author.php)など:表示しているユーザーの所属店舗
$branch = get_user_meta( get_queried_object_id(), 'branch', true );
if ( '' !== $branch ) {
echo '<p>所属店舗:' . esc_html( $branch ) . '</p>';
}
?>
表示するときは、echo で出して、esc_html で文字として出します。
前はこの記事で「<?php esc_attr( get_the_author_meta( ‘branch’, $user->ID ) ); ?>」と書いていましたが、echo がないので何も出ません。esc_attr は値を整えて返すだけで、画面には出さないためです。
確かめた結果
このサイトの作業環境(WordPress 7.1)で、管理者のユーザーに試しの値を入れて確かめました。
| 試したこと | 結果 |
|---|---|
| 「総社店<script>…」を保存 | タグが取り除かれて「総社店」で保存された |
| 編集画面の項目 | 保存した「総社店」が入っていた |
| 前の表示の例(echo なし) | 何も出なかった |
| 今の表示の例(echo esc_html) | 「総社店」と出た |
| ログインしていない状態で保存の処理を動かす | 保存されなかった |
| 項目が送られてこないとき | 警告なしで、前の値のまま |
試しに入れた値は、確かめたあと元に戻しました。



