【WordPress】特定の条件の時だけリダイレクト

wordpress

wordpressのとあるページのアクセスは特定のクエリーパラメータが無いとリダイレクトして欲しいとの要望。

もう少し具体的に言うと、問合せフォームを開く時はpost_idが必須にして欲しい
このパラメータが無い時は、別ページをリダイレクト表示させて欲しいとの事。

良いパターン

/contact/?post_id=1

ダメなパターン

/contact/
/contact/?post_id=(空白)
/contact/?post_id=hoge
/contact/?post_id=9999999(そんな記事は存在しない)

解決策

function.phpに以下を追加
リダイレクトにはwp_redirect関数を使う。

/**
 * contactページにpost_idが無い時、hogeへダイレクト
 */
function specific_url_redirect(){
  if( is_page('contact') ){
    $post_id = intval($_GET['post_id']);
    if(get_post_status($post_id) != 'publish'){
      wp_redirect( '/hoge/', 301 );
      exit;
    }
  }
}
add_action( 'get_header', 'specific_url_redirect' );

htaccessでの解決方法

ちなみに.htaccessで同様の事が出来るが、post_idが存在する記事なのかは考慮できない

RewriteCond %{QUERY_STRING} !^post_id=([0-9]+)$
RewriteRule ^contact/$ /hoge/? [L,R=301]

コメント

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