WordPressの自動補完リダイレクトを解除する方法(勝手にリダイレクトさせない)
WordPressには、存在しないURLにユーザーがアクセスした際に、正しいURLを自動的に探して転送する仕様が存在します。これにより、404ページが表示されて欲しい場面でも他のページにリダイレクトされてしまうことがあります。
本コラムでは、このような意図しないリダイレクトを解決したい方に向けて、そのための具体的なコードとその意味を解説します。
WordPressの自動補完リダイレクトを無効にするPHP
WordPressの自動補完リダイレクトを無効化し、404の時はそのまま404ページが表示されるようにするには、functions.phpに下記のPHPを追記します。
function disable_auto_complete_redirect( $redirect_url ) {
if ( is_404() ) return false;
return $redirect_url;
}
add_filter( 'redirect_canonical', 'disable_auto_complete_redirect' );
これだけで、対応は完了です。
以下で、コードの意味を解説します。
redirect_canonical
redirect_canonical
フィルターを使うことで、「WordPressがURLへのリクエストを処理し、それを正規の(= カノニカルな)URLにリダイレクトする処理」に介入できます。
今回はdisable_auto_complete_redirect
という関数を作成し、それにより「ステータスが404の場合は、自動的なリダイレクトを実行しない」という処理を用意した上で、redirect_canonical
フィルターに渡しています。
if ( is_404() ) return false;
「ステータスが404の時に、自動補完リダイレクトを実行せずに、そのまま404ページを表示させること」が目的なので、まずif ( is_404() )
で404かを判定します。
その上で、404であれば、redirect_canonical
フィルターにfalse
を返して、リダイレクトを無効にします。
なお、PHPではif文が1行で完結する場合は{}
を省略できるためif ( is_404() ) return false;
としています。省略せず下記のようにしてももちろん問題ありません。
function disable_auto_complete_redirect( $redirect_url ) {
if ( is_404() ) {
return false;
}
return $redirect_url;
}
add_filter( 'redirect_canonical', 'disable_auto_complete_redirect' );
return $redirect_url;
ステータスが404ではない場合には、デフォルトのリダイレクト処理を維持するために$redirect_url;
を返します。
これは要するに、404でなければ何もしないということです。
以上により、404の時は自動リダイレクトを無効化し、そうでない場合はデフォルトのリダイレクト処理を維持することができます。