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]
コメント