特定のページだけWordPressの自動リダイレクト機能を無効にする
WordPress の標準URL(カノニカルURL)機能
WordPressには自動でURLを補完してくれる『標準URL(カノニカルURL)』という機能があります。
これがなかなか便利な機能で、例えばプラグインを使って固定ページをそっくり投稿ページに変換するとします。
普通は固定ページを投稿ページに変換するとページのURLが変わってしまうものですが、この『標準URL』機能によって、古いURLにアクセスすると新しいURLに自動でリダイレクトしてくれます。
例)
http://example.com/test/
↓
http://example.com/2017/03/31/test/
うまくいかない場合
ただ、この補完機能はたまに間違えていたり、余計なことをします。
例えば、
- http://example.com/aaa
- http://example.com/bbb/aaa
という2つのURLは、ディレクトリ名は同じだけど階層が違うのですが、両方共
http://example.com/ccc
にリダイレクトしてしまうことがあります。
もちろんディレクトリ名が異なればこのバグは起きないですが、
functions.php にフィルターフックを記述することでも防げます。
コード
function redirect_special_permalink( $redirect_url, $requested_url ) {
$match_url = array(
'aaa'
);
foreach( $match_url as $url ) {
if ( strpos($requested_url, $url) ) return false;
}
return $redirect_url;
}
add_filter( 'redirect_canonical', 'redirect_special_permalink', 10, 2 );
2番目の引数である $requested_url に、$match_url の内容が含まれていれば return false でリダイレクトをやめさせます。