WordPressでGETパラメーターを保持する方法

WebではPOSTやGETでパラメーターを渡したり受け取ったりすることは良くあることですね。
WordPressで運用しているサイトでもしかりです。

GETで受け取ったパラメーターを維持していく方法は複数ありますが、WordPressを利用している場合は「カスタムクエリ変数」を使用する方法が一般的です。この記事では、「カスタムクエリ変数」を使用した、GETパラメーターの保持方法を解説しています。

準備 – GETパラメーターを保持する変数を作る

最初に、GETパラメーターを保持するための変数を作ります。テーマの「functions.php」に以下を追加します。

function add_query_vars_filter( $vars ){
	$vars[] = "my_get_var";
	return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );

上記の例でいくと「my_get_var」というのが、保持するための変数名です。この変数に、受け取ったGETパラメータを入れ、サイト内で保持する形になります。

この機能は、WordPressで「カスタムクエリ変数」と呼ばれています。

カスタムクエリ – WordPress Codex

カスタムクエリ変数に値を格納する

上で用意したカスタムクエリ変数に、GETで受け取った値を格納する方法です。

例えば、「https://nakajima-web.com/?p=abc123」でGETパラメーターが与えられたとすると、

$p = $_GET["p"];
set_query_var( 'my_get_var', $p );

「set_query_var」という関数で、カスタムクエリ変数に格納します。
※受け取ったパラメーターは必要に応じてサニタイズしてくださいね。

set_query_var – WordPress Codex

カスタムクエリ変数から値を取り出す

カスタムクエリ変数から値を取り出す方法には2種類あります。
一つは、単純に変数に格納するやり方、もう一つはWordPressのリンクに仕込んで取り出すやり方です。
それぞれを見てみましょう。

単純に変数に格納する

カスタムクエリ変数に値を格納した時は「set_query_var」という関数を使いましたが、逆に取り出す時は「get_query_var」という関数を使います。

$p = get_query_var( 'my_get_var' );

上の例ではカスタムクエリ変数「my_get_var」から値を取り出し、「p」という変数に格納します。

get_query_var – WordPress Codex

WordPressのリンクに仕込んで取り出す

「add_query_arg」という関数を使用すると、GETパラメーターを付けた形でWordPressのリンクを生成することができます。

set_query_var( 'my_get_var', "test123" );

$p = get_query_var( 'my_get_var' );

echo esc_url( add_query_arg( 'new_parm', $p,  home_url( '/' )) );

例えば、当サイトで上記のコードを実行すると、

https://nakajima-web.com/?new_parm=test123

というリンクが生成されます。

add_query_arg – WordPress Codex

裏ではどう動いている?

この記事で使用した「カスタムクエリ変数」は、実際はPHPのスーパーグローバル変数「$GLOBALS」に格納されています。スーパーグローバル変数なので、PHP内のどこからでも参照できる、というわけですね。