作者スラグを任意の文字列へ変更できるようにする方法(プラグインなし)

公開日:2022(令和4)年9月13日/最終更新日:

WordPress Customize Ideas | Personal WP Customization Notes (PWCN)

【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています



WordPressの標準仕様では、作者が書いた投稿の一覧ページを表示すると、URLが「サイトURL/author/ユーザー名」となり、サイトログイン時のユーザー名が案外簡単に丸裸になっているのをご存じでしょうか?

素人の方ならたまたま作者一覧を開いて「あれ?これってユーザー名じゃん」と気づく方もいると思いますが、WordPressで少しでもコードカスタマイズやセキュリティに興味を持った方なら、この不都合は周知の事実で、ログインセキュリティ対策の肝とも言えます。

このあからさまになっているURLのユーザー名の部分を日本語での正式名称では「作者スラグ」と言います。

この「作者スラグ」を任意の文字列に変更する有名なプラグインに、Edit Author Slugというのがあり、このプラグインは、複数のユーザーが自由に登録できるようなサイトで、ノーメンテナンスで作者スラグを設定法則に則って変更してくれるところが秀逸なのですが、個人で運営するサイトや、登録ユーザーが決まっているサイトではわざわざこのプラグインに頼らなくても、作者スラグの変更ができます。

今回はWordPressのログインセキュリティ対策の1つとして、プラグインなしで作者スラグを作者プロフィールから変更させる機能を持たせる方法を紹介します。

本ページの内容は2024年6月23日に大幅に改変しました。それ以前のものとは内容・紹介しているコードとも大きく異なっていますのでご注意ください。

作者スラグに使用されるデータ

コード紹介の前に、WordPressで作者の投稿一覧(作者ページ)のURLがどのように生成されているのかに触れておきます。

自身のサイトの作者ページを見ていただくと、URLは以下のようになっていることが確認できます。

サイトのトップページURL/author/ユーザー名

冒頭で述べた通り、このURLの中にユーザー名が含まれてしまうというのが問題となります。

このURLの中の「ユーザー名」の部分は、WordPressが接続するデータベースの中の「_users」テーブルにある「user_nicename」という項目のデータが出力される仕組みになっていて、新規ユーザーの登録時には、設定したユーザー名と同じものがセットされるようになっています。

通常、この「user_nicename」の項目は管理画面上では隠されていてプロフィール編集画面のどこにも出てこないので、本ページのコードを使って、以下のことを行うことで、作者一覧の「ユーザー名」の部分を任意に変更できるようにします。

本ページで掲載しているコードは、以下に了承した上で使用ください

  • コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
  • コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
  • コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
  • コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
  • 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
  • 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)

プラグインなしで作者スラグを変更可能にするコード

WordPress標準で作者一覧のURLがどうなっているかを確認する

きちんと動作するかの確認も兼ねて、現状の作者の投稿一覧ページを開いておきましょう。URLは以下のようになっているはずです。

サイトのトップページURL/author/ユーザー名

サイトの作者リンクから一覧表示させるか、上記のURLを自身のサイトURLとユーザー名に変えて表示されることを確認しておきましょう。

「user_nicename」を管理画面から変更するためのコード

管理画面から、以下のコードを、テーマのfunctions.phpへ追加します。

function pwcn_user_profile_author_slug_panel_init( $user ){
$head_text = __( '作者一覧に用いるスラグ','' );
$value = $user->user_nicename;

echo '<h2>'.esc_html($head_text).'</h2>';
echo '<input type="text" name="user_nicename" id="user_nicename" value="'.esc_html($value).'" class="regular-text" />';
}
add_action( 'show_user_profile', 'pwcn_user_profile_author_slug_panel_init' );
add_action( 'edit_user_profile', 'pwcn_user_profile_author_slug_panel_init' );

コードの追加が終わったら、ユーザープロフィール画面(「ユーザー」→「プロフィール」)を開いてください。

以下のような項目がプロフィール画面に追加されています(以下は表示例で、上記コードではプロフィール編集画面の一番下へ表示されます)。

作者スラグを任意の文字列へ変更できるようにする方法(プラグインなし)|Personal WP Customization Notes (PWCN)

ユーザープロフィール画面に項目が追加されたのを確認できたら、以下のコードをfunctions.phpへ追加します。

function pwcn_author_slug_profile_update( $errors, $update, $user ) {

	if ( !$update ) return;

	if ( empty( $_POST['user_nicename'] ) ) {
		$user->user_nicename = $_POST['user_login'];
	} else {
		$user->user_nicename = $_POST['user_nicename'];
	}
}
add_action( 'user_profile_update_errors', 'pwcn_author_slug_profile_update', 10, 3 );

このコードによって、先ほどのコードで追加された入力窓へ入力した文字列が保存されるようになり、作者一覧のスラグがその文字列に置き換わります。

2つのコードを追加したら、ユーザープロフィール編集画面を開き(開いていたら開きなおし)、以下のようにして試してください。

「user_nicename」が変更できるかを試す

未設定の状態では「ユーザースラグ」欄は、ユーザー名がそのまま入っていますので、別の文字列(半角英数字と「-」「_」が使えます)に変え、更新し、保存してみてください。

ユーザープロフィール画面をリロードして、「作者一覧に用いるスラグ」の項目が変更した文字列のままになっているかを確認してください。

変更されていない場合はコードが正しく設置されていないか、コード追加後にユーザープロフィール画面を開きなおしていないなどが問題の可能性がありますので再確認ください

問題なく更新できているようでしたら、先ほど開いておいた、作者の投稿一覧ページをリロードしてみましょう。

以下のような404ページが表示されたらOKです。

作者スラグを任意の文字列へ変更できるようにする方法(プラグインなし)|Personal WP Customization Notes (PWCN)

更に、きちんと作者ページが表示されるかを、以下のように先ほど入力した作者スラグを使って開いてみてください。

サイトのトップページURL/author/作者一覧に用いるスラグに入力した文字列

正常に表示されれば、機能の追加は完了です。

「作者一覧に用いるスラグ」欄を空にして更新すれば、WordPress標準(ユーザー名を作者スラグとして表示)に戻ります

, , , , ,



Lolipop ServerMoshimo Ad x-serverMoshimo Ad

WordPress Block Theme Customize | Personal WP Customization Notes (PWCN)
ブロックテーマでサイトの背景画像を設定する5つの方法