クライアントから、特定のカテゴリーの記事に対してURLパラメータを付与するというの依頼がありました。URLの無限リダイレクトでちょっと悩んだので、解決策を記載しておきます。
条件・やりたいこと
- カテゴリー「sample」の投稿記事にパラメータを付与する
- 最終的なURLは「https://aaa.com/1111/?_parameter=1111」(1111の部分は投稿ID)
手順
ブロックテーマでテーマを作成していますので、ヘッダーに直接phpを書くことができません。そこで「Lazy Blocks」というプラグインを利用して、カスタムブロックを作り、headerパーツに挿入することにしました。以下が「Lazy Blocks」のブロックに書いたphpです。
<?php
if(in_category('sample')){
if(!$_GET['_parameter']){
$post_id = get_the_ID();
$url = add_query_arg( '_parameter', $post_id, $_SERVER['REQUEST_URI'] );
header('Location: '.$url);
exit();
}
}
?>
肝になるのは、if(!$_GET[‘_parameter’]) の部分で、これですでにパラメータが付与されているかどうかを判断し、パラメータが付与されていない時だけ、処理を行います。この記述がないと無限リダイレクトになり、表示できなくなります。
今回は値がひとつだけですが、add_query_argは配列で記述できるため、複数の値をつけることもできます。その場合は下記のように記述していきます。
<?php
if(in_category('sample')){
if(!$_GET['_parameter']){
$post_id = get_the_ID();
$url = add_query_arg( array('_parameter1'=>'100','_parameter2'=>$post_id) $_SERVER['REQUEST_URI'] );
header('Location: '.$url);
exit();
}
}
?>
最終的なURLは「https://aaa.com/1111/?_parameter1=100&_parameter2=1111」になります。
参考にした記事が2つほどありますので共有しておきます。