クライアントから、特定のカテゴリーの記事に対して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つほどありますので共有しておきます。

https://elearn.jp/wpman/function/add_query_arg.html