フレキシブルにお客様のご要望にあわせ提供します.

WordPress ディレクトリ形式でGET変数(WP ver6)

WordPress でも一般の PHP と同様に, $GET で取得することは確かに可能です。

しかし,  折角ならば スラッシュ(ディレクトリ形式)でアクセスしたい。

その場合,  一般のPHP ですと, htaccess をいじらねばなりません.  WordPress では パーマリンクに htaccess を利用していますので, なるべく触りたくありませんし,  触らないでいい仕組みがあるのです

 

そこで以下のサイトが参考になりました。

パラメータ付きのURLを読みやすいディレクトリ形式のURLへ変換 (Global Link様のサイト)

このサイトには,

 

上記の例では、もともとのURL「xxx.com/list/?career=xxx&maker=yyy&model=zzz」を「xxx.com/list/xxx/yyy/zzz/」に変換しています。

 

とあります。とある固有のページの場合の例を紹介してあります。

ここで, もし, URLを「xxx.com/xxx(pagename)/param(param-arg)/value(param-value)」にしたいならどうしましょうか?つまり, 任意ページへの適用です。

参考サイトを応用すればよく,  rewrite_rule の記述を

 


 add_rewrite_rule('^([^/]*)/([^/]*)/?','index.php?pagename=$matches[1]&param=$matches[2]','top');

 

とすればよいわけです。なお,  pagename は WordPress の予約語であり, ページのパーマリンクの名称にあたります。

 

この GET変数を取得する方法は, 様々な site で紹介してあるとおりで,   get_query_var( “param”)  でえられます。

ただし,  パラメータや値で用いることができるのはURLで使用できる文字です。日本語も使えますが, その場合はパーセントデコードをします。

つまり呼び出すときに

urldecode(get_query_var( “param”));

とでデコードすると日本語にも対応できるわけです。

 

結果

 

 

注意点

  • 参考サイトにもあるとおり, add_rewrite_rule を変更したら, 管理画面→パーマリンク設定を開いて保存ボタンを押すこと。
  • パラメータには WordPress の予約語は使用できません。
  • このパラメータはグローバル変数の上に,  用途が決まっている変数のため,  param など簡単なものではなく, 他のユーザーと被らないような変数名にしたほうがよいかもしれません。
  •  セキュリティ上の不安があるならば,  パラメータ呼び出し側では 値に制限をかけて使用するなどがよいかもしれません。また, このページでは参考サイトを応用し任意のページにも展開していますが, 参考サイトのとおり特定ページ上のみでの適用がよいかもしれません。