Memo

メモ > 技術 > CMS: WordPress > リダイレクト

■リダイレクト
■リライトルールの概要 WordPress パーマリンク リライトルール/ Web Design Leaves https://www.webdesignleaves.com/pr/wp/wp_permalink_rewrite.html add_rewrite_endpoint() を使うことにより、処理のエンドポイントを追加できる これと wp_redirect() などリダイレクト命令を組み合わせることにより、 「特定ページにアクセスされたら、特定ページにリダイレクト」ができる ■処理のエンドポイントを追加 functions.php に以下のコードを追加したとする
add_rewrite_endpoint( 'my-endpoint', EP_ROOT );
「管理画面 → 設定 → パーマリンク設定」で、何も変更せずに「変更を保存」をクリックする この状態で /my-endpoint/ というURLにアクセスすると、トップページ(EP_ROOT)が表示される functions.php に以下のコードを追加したとする
add_rewrite_endpoint( 'foo', EP_PERMALINK | EP_PAGES ); function my_foo_template_redirect() { $foo = get_query_var( 'foo' ); if(!empty($foo)) { echo 'パラメータの値: ' .$foo; exit; } } add_action( 'template_redirect', 'my_foo_template_redirect' );
「管理画面 → 設定 → パーマリンク設定」で、何も変更せずに「変更を保存」をクリックする /contact/ というページが存在するとして、この状態で /contact/foo/hello/ というURLにアクセスすると以下が表示される
パラメータの値: hello
functions.php に以下のコードを追加したとする
add_rewrite_endpoint( 'foo', EP_ALL ); function my_foo_template_redirect() { $foo = get_query_var( 'foo' ); if(!empty($foo)) { echo 'パラメータの値: ' .$foo; exit; } } add_action( 'template_redirect', 'my_foo_template_redirect' );
「管理画面 → 設定 → パーマリンク設定」で、何も変更せずに「変更を保存」をクリックする この状態で /foo/hello/ というURLにアクセスすると以下が表示される
パラメータの値: hello
■リダイレクト ※「Simple 301 Redirects」プラグインなどを使うことでもリダイレクトはできるので、それらの利用も検討するといい template_redirect の詳細については以下を参照 どのテンプレートを読み込むかを決定する直前(ページを表示する直前)に実行されるとのこと この時点ではまだレスポンス(ヘッダ)を返していないので、 wp_redirect() や wp_safe_redirect() などを使って任意の URL にリダイレクトさせることができる WordPress functions.php / Web Design Leaves https://www.webdesignleaves.com/pr/wp/wp_functions_php.html#template_redirect これを利用して例えば functions.php に以下のコードを追加したとする
add_rewrite_endpoint( 'foo', EP_ALL ); function my_foo_template_redirect() { $foo = get_query_var( 'foo' ); if(!empty($foo) && $foo == 'contact' ) { wp_redirect( home_url( '/contact/' ) ); } } add_action( 'template_redirect', 'my_foo_template_redirect' );
「管理画面 → 設定 → パーマリンク設定」で、何も変更せずに「変更を保存」をクリックする この状態で /foo/contact/ というURLにアクセスすると /contact/ にリダイレクトされる ■リライトとリダイレクトの組み合わせ例 まとめとして、以下のようなプログラムにすると
function rewrite_staff() { add_rewrite_rule( '^staff-list$', 'index.php?post_type=staff', 'top' ); add_rewrite_rule( '^staff-list/tokyo$', 'index.php?post_type=staff&tab1=kantou-area&tab2=tokyo', 'top' ); add_rewrite_rule( '^staff-list/kanagawa$', 'index.php?post_type=staff&tab1=kantou-area&tab2=kanagawa', 'top' ); } add_action( 'init', 'rewrite_staff' ); function redirect_staff() { if ( is_archive( 'staff' ) && preg_match('/^\/staff\//', $_SERVER['REQUEST_URI'])) { if (empty($_SERVER['QUERY_STRING'])) { $query = ''; } else { $query = '?' . $_SERVER['QUERY_STRING']; } wp_redirect( home_url( '/staff-list/' . $query ) ); } } add_filter( 'template_redirect', 'redirect_staff' );
・/staff-list/ にアクセスすると /staff/ の内容が表示される ・/staff-list/tokyo/ にアクセスすると /staff/?tab1=kantou-area&tab2=tokyo の内容が表示される ・/staff-list/kanagawa/ にアクセスすると /staff/?tab1=kantou-area&tab2=kanagawa の内容が表示される ・/staff/ にアクセスすると /staff-list/ にリダイレクトされる。クエリがあれば、それも含めてリダイレクトされる となる つまりSEO対策として /staff/ /staff/?tab1=kantou-area&tab2=tokyo /staff/?tab1=kantou-area&tab2=kanagawa というURLを以下のように変更したことになる /staff-list/ /staff-list/tokyo/ /staff-list/kanagawa/

Advertisement