WordPressをCMSとしてに利用する場合、作成者(投稿者)アーカイブが必要ないケースがあります。
基本的に作成者アーカイブは作成されてしまうので、これを「作成されない」方法をまとめておきます。(Twitterでのやりとりをまとめただけです)

スポンサーサイト

ちなみにTwitterでつぶやいたら、@jim0912 さんに光の速さで返信をもらいました。

ステキです。さすがです。
ということで、テーマのfunctions.phpに以下を記述。

上記コードの意味はこちら

functions.phpを上書きした後は、最後に必ずダッシュボードの設定→パーマリンク設定で(変更しないで)「更新」をクリックしておいてください。

意味は分かったけど

これでとりあえず、当座の目標は達成して「やった〜!」と思ったところ、@jim0912 さんからツイートが。

お題を投げかけられました(汗)
先のツイートにもあるように「リライトルール」「wp-includes/rewrite.php」がキーワードになります。
コードを読んだり、Codexを検索してみると、 ばっちりありました。

要約すると

  • WP_Rewriteはリライトルールを管理するためのWordPressクラス。
  • リライトルールを変更する(フィルターをかける)ためのフックが用意されている。
    今回は投稿者アーカイブだったので author_rewrite_rules を使いました。よくあるパーマリンクに働きかけるプラグイン(WP No Category Baseなど)もこのフックを使っているようです。
  • flush_rules() というリライトルールを再生成し、データベースに保存する関数がある。
    リライトルールを functions.php やプラグインで追加したら flush_rules() でルールをDBに保存しなければ使えません。flush_rules() は基本的にパーマリンクの更新で呼ばれるので、パーマリンク設定を更新すればOK。

となります。

先に挙げたプラグイン「WP No Category Base」 はプラグインが有効化・無効化されたり、カテゴリーの追加・編集などのタイミングで flush_rules() を実行していましたが、今回のように、常にリライトルールを監視する必要がない場合は、パーマリンク設定で更新ボタンを押した方が間違いがないです(詳細はCodexにも書いてありますが、flush_rules()はリライトルールが変更されるときにだけ呼び出せばいいので) 。

と、理解したところでツイートしたところ


正解のようでした。

基本を理解するのが大事

WordPressに限りませんが、やりたいこと(実現したいこと)とそれに必要そうなキーワードでネットで検索すれば、多かれ少なかれTipsやコードスペニットは出てきます。
コードを丸写しすれば(コードの妥当性などは無視してもとりあえずは)希望したとおりの動作になるでしょう。

(余談ですが、ブログにコードを掲載するときは理解を深めるためと、裏付けになるようCodexや参考にしたサイトにリンクを張るようにしています。 )

しかし、今回のように 「なんでそのような動作になるのか」を理解することが大事だ思いました。

本来なら体系的に勉強したり、ソースコードをおっていけば良いのでしょうが 中々そんな余裕もないのが現状です(ノンプログラマーゆえ苦手、というのもあります)。
今後も分からないことをTwitterでぼやいたりすると思いますが、温かい目で見守っていただけると幸いです。

WordPressで作成者(投稿者)アーカイブを作らない方法(リライトルールの勉強)」への5件のフィードバック

  1. こんにちは。とても参考になる記事でした。カテゴリーページを作りたくなく、authorの部分をcategoryとすることで、カテゴリーページは404表示となるのですが、サブカテゴリーについては表示されてしまいます。サブカテゴリーはどのように指定すればよいのでしょうか?

    1. category_rewrite_rules というフィルターフックがあったのですが、これはWordPress 3.1以降無くなってしまいました(Codexの情報が古いです)。
      /wp-includes/rewrite.php にリライトルールのフィルターが載っていますので、詳しくはソースをご覧ください。
      具体的にどのようなコードを書かれているか分かりませんが、上記の理由から 3.1以降ではcategory_rewrite_rulesフィルターフックが使えません。
      カテゴリーアーカイブそのものを無効にしたければ、リライトルールのフィルターではなく、他の手段を使った方が良いでしょう。
      具体的には parse_query か template_redirect を使って見てください。
      参照: https://gatespace.jp/2012/12/10/wordpress-default-create-pages/

      1. 回答ありがとうございます。category_rewrite_rulesで親カテゴリーは404にできたので、それでよいのかと思っていました。parse_query か template_redirectを試してみます。

Comments are closed.