一度消した投稿者ページを復活させたいのに404になる
- 投稿日/更新日
解決方法
flush_rules()をする。つまり、メニューのパーマリンクから設定を保存すれば復活します
解説
世にはWordPressの投稿者ページを削除する方法が溢れていますが、そのページを制作したり復活させる記事はなぜか少ないですね。投稿者ページが忌み嫌われているのはなぜでしょうか。
さて、世の中に出回っている投稿者アーカイブを消す方法として下記の方法が挙げられています。
add_filter( 'author_rewrite_rules', '__return_empty_array' ); function disable_author_archive() { if( $_GET['author'] || preg_match('#/author/.+#', $_SERVER['REQUEST_URI']) ){ wp_redirect( home_url( '/404.php' ) ); exit; } } add_action('init', 'disable_author_archive');
一行目のauthor_rewrite_rulesは__return_empty_arrayという空を返すテンプレートタグを設定しています。投稿者アーカイブの生成自体を止めるのはこれだけで十分です。
二行目移行は404へのリダイレクト設定です。?author=1といったGETパラメーターが渡ってきた場合、またはURL内に/author/がある場合にどこに飛ばすかという設定になります。検索するとこのリダイレクト部分も含めたコードが散見されるのですが、関数名が一緒なのでコピペしているのがバレバレだったりしますね。
さそれはさておき、一度この記載をして保存をすると投稿者ページは無事消えてしまいます。ただ復活させる場合はどうするか? このコードをコメントアウトすればよいのではないか? そういう発想になると思いますが、それだけだと復活はしません。なぜならrewrite_rulesされているからです。
一行目のrewrite_rulesフィルタを追加した場合、従来であればWPメニューの「パーマリンク」から「設定を保存」する必要があったようです。なぜかバージョン5.9.3ではこの操作が不要で、記述するだけでルールが適用=投稿者ページが削除されました。
従来のこのパーマリンクから設定を保存する行為ですが、目的はflush_rules()というメソッドを走らせることです。ドキュメントによると「リライトルールのキャッシュを更新するためのもの」ということで、ルールはキャッシュされていることがわかります。rewrite_rulesを記述した際はこのキャッシュを更新する必要があります。つまりどういうことかというと、V5.9.3ではルールの追加時は自動で更新されるが、ルールを削除した場合は手動で更新する必要があるということになります。いやそれがわからず2時間悩んだんですが。
あれ?それじゃflush_rules()をfunctionに書いておけば良いのでは?という発想にもなるはずですが、ドキュメントにはこうも書かれています。
この機能はパフォーマンスの面で非常にコストがかかる可能性があるので、できるだけ使用を控える必要があります。たとえばプラグインやテーマの有効化または無効化時に限って使いましょう。init など、ページのロード時に毎回実行されるフック内では使わないようにあらゆる努力を払ってください。
ということで、ルールを新たに作る・消すといった設定をした場合は、手動でflush_rules()をすると覚えて置きましょう。
備忘録として残しておきます。