WordPress のユーザーの編集画面に項目を足す:所属店舗などをプロフィールに保存して表示する

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

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 行の文字にしてから保存する
WordPress のユーザーの編集画面に項目を足す:所属店舗などをプロフィールに保存して表示する

足した項目を表示する

テンプレート(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) 「総社店」と出た
ログインしていない状態で保存の処理を動かす 保存されなかった
項目が送られてこないとき 警告なしで、前の値のまま

試しに入れた値は、確かめたあと元に戻しました。

関連機能

  1. WordPress の管理画面の投稿の一覧にアイキャッチ画像を出す:Admin Columns と、プラグインを使わないコード

  2. WordPressプラグインが英語表示になってしまった時に日本語にする方法 ( 日本語対応済みのプラグインの場合 )

  3. ダッシュボードに自由に使えるメモ用エリアを追加

サイドバー

よく使うカスタマイズ

最近の記事

  1. Fstyle Final Output Replacer のルールの一覧(generator タグを消す 2 つのルール)

Profile

PAGE TOP