WordPressでサイト作りをしていて、少しでもログインセキュリティに関する知識や興味のある方なら誰でもご存じの、ユーザー(著者)ページのスラグ(URLの末尾)がユーザー名になってしまう問題。

試しに自身のサイトで以下のような形のURLを直接入力するか、ユーザー一覧から表示をクリックして開いてみてください。

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

...何も対策してなければバッチリユーザー名が出てしまってますね。

この「ユーザー名」の部分をスラグというのですが、スラグを自由に変更できる「Edit Author Slug」という有名なプラグインがあります。

でも、ユーザーの増減が激しいサイト(会員制サイトなど)でなければ、ユーザー登録と同時に自動でスラグ変更するというプラグインの機能は必要ないですから、自力で機能追加するのも手だと思います。

そこで、テーマのfunctions.phpへコードを追記することで、ユーザープロフィール編集画面から自由に著者スラグを変更できるコードを紹介します。

テーマのfunctions.phpへ追記や変更をしたことがない方は、素直にプラグインを使用した方がよいでしょう

著者スラグを変更できるようにするコード

何をしているかを先に解説しておきます。コード解析はしていませんが、恐らく先のプラグインでも同じことをしています。

著者スラグは、ユーザー用のデータベーステーブルの中の「user_nicename」という項目にデータが格納されています。

この項目は、ユーザー登録時から何もしなければ、ユーザーID(ユーザー名)と同じものがセットされるため、著者スラグ=ユーザーIDとなってしまうのです。

以下のコードは、ユーザープロフィール画面に「作者スラグ」という項目を追加し、この項目を変更することで著者スラグを自由に変更できるというものです(下図赤枠部分)。

プラグインなしで、ユーザー(著者)ページのスラグを変更する方法|Twenty Twenty-Two (TT2)のカスタマイズ情報

また、気づく方は少ないと思いますが、「Edit Author Slug」プラグインでは、スラグ設定を元に戻して更新してからプラグインの停止・削除をしないと、変更された著者スラグ設定がそのまま残ってしまいます。

そこで下記のコードでは、「作者スラグ」欄を空(空白)にして更新すれば、元のユーザーIDに戻るようにしています。

以下はこのような動きをさせるためのコードです。有効化しているテーマのfunctions.phpへ追記してください。

if (current_user_can('manage_options')) {

function ha_author_slug_edit_ob_start() {
	ob_start();
}
add_action( 'personal_options', 'ha_author_slug_edit_ob_start' );

function ha_insert_author_slug_input( $user ) {
    $content = ob_get_clean();
    $regex = '/<tr(.*)class="(.*)\buser-user-login-wrap\b(.*)"(.*)>([\s\S]*?)<\/tr>/';
    $nicename_row = sprintf(
        '<tr class="user-user-nicename-wrap"><th><label for="user_nicename">%1$s</label></th><td><input type="text" name="user_nicename" id="user_nicename" value="%2$s" class="regular-text" />' . "\n" . '<span class="description">%3$s</span></td></tr>',
        esc_html__( '作者スラグ(Optional)' ),
        esc_attr( $user->user_nicename ),
        esc_html__( '作者スラグを半角英数字、「-」「_」を使って入力してください' )
    );
    echo preg_replace( $regex, '\0' . $nicename_row, $content );
}
add_action( 'show_user_profile', 'ha_insert_author_slug_input' );
add_action( 'edit_user_profile', 'ha_insert_author_slug_input' );

function ha_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', 'ha_author_slug_profile_update', 10, 3 );
}

たったこれだけのコードで実装できるとは...って感じですけど、これだけです(笑)。

追記が終わったら、実際に「作者スラグ」を変更し、

サイトのトップページURL/author/作者スラグ

で著者の投稿一覧ページが表示されることと、

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

で、404エラー(ページなし)が出るかを確認してください。

本機能は、当サイトで配布している【HABONE】テーマ1.9からは標準装備にしています

参考:How to Change Author URL Slug and Base with or without Plugin