WordPressをCMSとしてに利用する場合、作成者(投稿者)アーカイブが必要ないケースがあります。
基本的に作成者アーカイブは作成されてしまうので、これを「作成されない」方法をまとめておきます。(Twitterでのやりとりをまとめただけです)
ちなみにTwitterでつぶやいたら、@jim0912 さんに光の速さで返信をもらいました。
@gatespace_k authorのリライトルール作るところ削ればおk
— まがぞん (@jim0912) May 15, 2012
@gatespace_k add_filter( 'author_rewrite_rules', '__return_empty_array' );
— まがぞん (@jim0912) May 15, 2012
ステキです。さすがです。
ということで、テーマのfunctions.phpに以下を記述。
add_filter( 'author_rewrite_rules', '__return_empty_array' );
上記コードの意味はこちら
@gatespace_k wp-includes/rewrite.php のfuntion rewrite_rules でリライトルールを作っています。先のフックは作成者のルールを空にして、リクエストがあっても404となります。ここら辺分かると動作の理解が深まりますよ。
— まがぞん (@jim0912) May 15, 2012
functions.phpを上書きした後は、最後に必ずダッシュボードの設定→パーマリンク設定で(変更しないで)「更新」をクリックしておいてください。
意味は分かったけど
これでとりあえず、当座の目標は達成して「やった〜!」と思ったところ、@jim0912 さんからツイートが。
@gatespace_k なんでだか分かりますか?
— まがぞん (@jim0912) May 16, 2012
お題を投げかけられました(汗)
先のツイートにもあるように「リライトルール」「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()はリライトルールが変更されるときにだけ呼び出せばいいので) 。
と、理解したところでツイートしたところ
@gatespace_k ぴんぽんです^^
— まがぞん (@jim0912) May 16, 2012
正解のようでした。
基本を理解するのが大事
WordPressに限りませんが、やりたいこと(実現したいこと)とそれに必要そうなキーワードでネットで検索すれば、多かれ少なかれTipsやコードスペニットは出てきます。
コードを丸写しすれば(コードの妥当性などは無視してもとりあえずは)希望したとおりの動作になるでしょう。
(余談ですが、ブログにコードを掲載するときは理解を深めるためと、裏付けになるようCodexや参考にしたサイトにリンクを張るようにしています。 )
しかし、今回のように 「なんでそのような動作になるのか」を理解することが大事だ思いました。
本来なら体系的に勉強したり、ソースコードをおっていけば良いのでしょうが 中々そんな余裕もないのが現状です(ノンプログラマーゆえ苦手、というのもあります)。
今後も分からないことをTwitterでぼやいたりすると思いますが、温かい目で見守っていただけると幸いです。