広告

【WordPress】スラッグをリネームした時に自動的にリダイレクトされるのを止める

アイキャッチ WordPress

WordPressで、投稿やカテゴリなどのスラッグをリネームした際、古いスラッグに新しいスラッグへのリダイレクトが自動的に設定されます。

これは便利な一方で、古いスラッグ(URL)に新しいコンテンツを配置したい場合などに問題が発生します。

WordPressのリダイレクト設定はデータベースのwp_postmetaテーブルに_wp_old_slugの値として保存されているようなので、この値を探して削除することで手動で取り除くことも可能です。

また、もう一つの手段として、フィルターフックを使って一時的にこれらのリダイレクトを無効にする方法があります。

自動リダイレクトを行うアクションを取り除くフィルターフック

functions.phpなどに以下の2行を追記します。

remove_action('template_redirect', 'wp_old_slug_redirect');
remove_action('template_redirect', 'redirect_canonical');

正確な仕様が見つけられていないのですが、リネームなどによって書き換えられたスラッグは上記のいずれかのアクションで新しいURLに置き換えられるようです。

パーマリンク関連のフィルタ調整を行った場合は、WordPress管理画面の「設定」→「パーマリンク設定」を開き、上書き保存(設定内容は何も変更せずそのまま「変更を保存」する)を行っておくことを忘れないでください。

コードリファレンスなどを見る限り、wp_old_slug_redirectのフックでリダイレクトが取り除けるようなのですが、カテゴリなどのタクソノミーのスラッグを変更した場合はredirect_canonicalが効いているようで、1行目の記述だけではうまく動きませんでした。URLが404だったり同名のタクソノミーがいたりいなかったりでちょっと動作が変わっているようです。

ちなみに、スラッグのリネームを繰り返したりリダイレクトのプラグインなどを使ってリダイレクトループが発生したような場合も上記のコードでとりあえず止めることができます。(本来残しておきたいリダイレクトも止まってしまいますが。)

補足

なお補足ですが、WordPressはパーマリンクを探索する際、完全一致ではなく前方一致で探す仕様になっています。

たとえば、パーマリンクが/my-favorite-thingsのようなスラッグの投稿があった場合、/my-favoriteや、/my-favなどはすべて/my-favorite-thingsのページにリダイレクトします。このあたりもトラブった際の症状の切り分けを行う際にハマりがちなポイントなので注意してください。

コメント

タイトルとURLをコピーしました