WordPress 投稿者アーカイブページの URL のユーザー名

投稿者アーカイブページの URL には、基本パーマリンク以外の場合、ユーザー名 (スラッグ) が含まれる URL となります。

(サイトアドレス)/author/(ユーザー名)

このユーザー名は、ユーザー名ではあるのですが、厳密にはユーザー情報のナイスネーム (user_nicename) が使用されます。ニックネーム (nickname) ではありません。ナイスネームは、ユーザーの作成時にユーザー名 (user_login) と同じ値が格納されます。プロフィール画面には項目がないため後からユーザー名以外のものに変更することができません。よってユーザー名=ナイスネームということになります。

プロフィール画面にナイスネームを追加

そこで、ナイスネームをプロフィール画面に追加して編集できるようにする方法を紹介します。

プロフィール画面

下記のコードをテーマの functions.php に追記します。これでプロフィール画面の最後尾にナイスネーム項目が追加されます。

<?php
add_action( 'show_user_profile', 'my_user_profile' );
add_action( 'edit_user_profile', 'my_user_profile' );
add_action( 'user_profile_update_errors', 'my_user_profile_update_errors', 20, 3 );

function my_user_profile() {
    global $profileuser;

	?>
	<h2>ユーザー情報</h2>
	<table class="form-table" role="presentation">
	<tbody>
	<tr class="user-last-name-wrap">
		<th><label for="user_nicename">ナイスネーム</label></th>
		<td>
		<input type="text" name="user_nicename" id="user_nicename" value="<?php echo esc_attr( $profileuser->user_nicename ); ?>" class="regular-text" />
		<p class="description">ナイスネームは投稿者アーカイブページのスラッグとして使用されます。</p>
		</td>
	</tr>
	</tbody></table>
	<?php
}

function my_user_profile_update_errors( $errors, $update, $user ) {
	if ( ! $update ) {
		return;
	}

	if ( empty( $user->ID ) ) {
		return;
	}

	check_admin_referer( 'update-user_' . $user->ID );

	if ( isset( $_POST['user_nicename'] ) ) {
		$user_nicename = sanitize_user( wp_unslash( $_POST['user_nicename'] ), true );

		if ( empty( $user_nicename ) ) {
			return;
		}

		$old_user_nicename = get_user_by( 'id', $user->ID )->user_nicename;
		if ( $user_nicename === $old_user_nicename ) {
			return;
		}

		if ( mb_strlen( $user_nicename ) > 50 ) {
			$errors->add( 'user_nicename_too_long', '<strong>エラー</strong>: ナイスネームは50文字以内にしてください。' );
			return;
		}

		if ( get_user_by( 'slug', $user_nicename ) ) {
			$errors->add( 'user_nicename_exists', '<strong>エラー</strong>: ナイスネームが同じ名前のものがすでに存在しています。別の名前にしてください。' );
			return;
		}

		$user->user_nicename = $user_nicename;
    }
}
?>

※ コピペする場合は、先頭の PHP 開始タグと最後尾の PHP 終了タグにご注意を。

注意事項

既存のナイスネームで、新規にユーザーを作成するとナイスネームには -2 のように枝番が付与されます。

コメントを残す

メールアドレスが公開されることはありません。

日本語でコメントを入力してください。(スパム対策)