【備忘録】WordPressの作者アーカイブURLから「/author」を削除する方法

本文の上下にあることが多い作者のアーカイブ(過去記事)リンク。クリックするとその人の書いた記事がずらっと表示されますね。URLを見ると「サイトのURL/author/〇〇」となっていますが、今回はその中の「/author」を消す(なくす)方法はないかというのがテーマです。

あまり必要ないかとも思いますが、そんなことしたいなぁと思う方もいるかも知れないと思って調べてみました。やっぱりカスタマイズの仕方は断然英語圏の方の方がきちんと紹介してくれてますねぇ・・ということで以下の参考ページ(英語のサイトです)の方法を紹介しておきます。

Heres a little trick on how to remove the WordPress author prefix from the author slug (URL).
スポンサーリンク

作者アーカイブのURLから「/author」を削除する方法

上の参考リンクを開いて自動翻訳すれば意味は分かるかと思いますが、自動翻訳のない方のためにグーグル君が頑張った訳を掲載しておきますね

著者スラッグからWordPressの著者プレフィックスを削除する方法についてちょっとしたトリックがあります。
明確にするために、このスニペットはあなたがターンするのに役立ちます:「http://domain.com/author/peter/を」へ:「http://domain.com/peter/」。

WordPressの著者のパラダイムを使用するサイトのすべてのリンクは、元のリンクを保持せずに新しいリンクにリダイレクトする必要があるため、リダイレクトは使用しないで、WordPressで実際の機能を作成しますfunctions.phpファイル。私たちは、それぞれのユーザの名前を希望する形式で一致させるためにWP書き換えルールを追加する必要があります。

マークアップの最初の部分は、author_rewrite_rulesフィルタにフックし、著者の書き換えルールを置き換えます。これにより、すべてのユーザー名が取得され、各ユーザー専用の書き換えルールが追加されます(以下のマークアップはフィードを処理しませんので、必要があればWP No Category Baseソースを参照してください)。
マークアップの第2の部分は、author_linkフィルタにフックし、返されたURLから ‘author’ベースを削除する関数です。
説明
このコードをfunctions.phpファイルに追加します。
*このスニペットを実装した後、設定内の「permalinks」に移動して「変更を保存」をクリックして、書き換えルールをフラッシュしてください。

以下のコードをテーマのfunctions.phpへ追記すると適用されます

// The first part //
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb;
    $author_rewrite = array();
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");    
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }   
    return $author_rewrite;
}

// The second part //
add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}

訳にも書いてありますが、設定したら管理画面の「設定」→「パーマリンク設定」を開き、何もしないで更新することでパーマリンク構造が初期化されて動作するようになりますからお忘れなく。

また逆にこのコードを削除して元に戻す場合も同様にパーマリンク構造の初期化をしてくださいね。

※「/author」がなくなることでサイトのパーマリンク設定によってはスラグがかぶってしまう場合があります。そんなときどんな動作をするのか??というところまでは検証していませんので自己責任で使ってくださいね。

おまけ 作者アーカイブからユーザー名などが判明するのを防ぐ方法

ちなみにこの件とは関係あるようなないようなですが、この作者アーカイブのURLからユーザー名やユーザーIDがバレバレなのご存知ですか?このサイトでも履歴を取ると結構この部分から類推してログインしてよ--なんて輩が結構います。全然別物にしてるのにねぇ・・・と半ば微笑ましく履歴を見てます。

ユーザーIDやユーザー名ができるだけ分からないようにするには

11月1日~2日の間に結構な数のログイン失敗の履歴がありました。これらは当然IPアドレスを調べてアクセス拒否していくとして、問題なのは不正ログインしようとしたときに入力されたユーザー名。Wordpressをそのまま使っている方、ログインの履歴なんか知らないという方、表示画面から簡単にユーザーの記事アーカイブページへ移動できてしまう方、知らない間にサイトを乗っ取られて・・・なんてことのないように気を付けましょうね。

などを参考に設定してみてくださいね。

また、1人で管理していて作者アーカイブが必要ないという方はテーマでそれを出力しているタグを削除するのも手かと思います。

トップへ戻る