WordPress 4.5でindex.phpをディレクトリルートにリダイレクトさせない

どうも、すっかりデザインから遠ざかっているエンジニアおじさんです。

表題の通り、Wordpress 4.5くらいにしたら、canonical.phpをいじるだけだとリダイレクトが止まらなくなったので対処しましたの備忘録。

環境によるかもしれません。

後、筆者はindex.phpをリネームしているので、もしかしたらリネームしないと動かないかもしれません。んなことはないと思いますが。

動機

ぐぐってたら今年のフォーラムの記事で「非推奨だからやるな」とか書かれてて固定ページを使おうね、みたいになってたんですが。

いや分かります、仰る通りです。

でも、カスタムテンプレートで、どう頑張ってもホームでしか適用出来ないウィジェットっていうのを、URLを変えずに導入したいというまためちゃくちゃニッチな要望が出たので仕方がないんです。

 

やり方

おなじみの/wp-include/canonical.phpの392行目あたり(ver.4.5くらい)

 // trailing /index.php
 //$redirect['path'] = preg_replace('|/' . preg_quote( $wp_rewrite->index, '|' ) . '/*?$|', '/', $redirect['path']);

上記はもしかしたら要らないかもしれないけど検証が面倒なのでそのまま。canonical.phpだけをいじった状態でも一瞬動いたような気もした。が、余計な/がついたりとかで気持ち悪かったので下記も追加。

テンプレートによるのかもしれない。

 

使用するテンプレートのfunctions.php

下記を適当に末尾の?>の前にでも追加

remove_filter('template_redirect', 'redirect_canonical');

 

従前通りのcanonical.phpだけで動かなかったらfunctions.phpもいじる感じで。

 

おまけ

mod_rewrite(というか.htaccess)のテスト

サイトが充分に早いと、mod_rewriteのリダイレクトなのか、phpによるリダイレクトなのか体感では分からない(体感で判断するなという話)ので、先に.htaccessに異常がないかチェックをする。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です