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]¶m=$matches[2]','top');
とすればよいわけです。なお, pagename は WordPress の予約語であり, ページのパーマリンクの名称にあたります。
この GET変数を取得する方法は, 様々な site で紹介してあるとおりで, get_query_var( “param”) でえられます。
ただし, パラメータや値で用いることができるのはURLで使用できる文字です。日本語も使えますが, その場合はパーセントデコードをします。
つまり呼び出すときに
urldecode(get_query_var( “param”));
とでデコードすると日本語にも対応できるわけです。
結果
注意点
- 参考サイトにもあるとおり, add_rewrite_rule を変更したら, 管理画面→パーマリンク設定を開いて保存ボタンを押すこと。
- パラメータには WordPress の予約語は使用できません。
- このパラメータはグローバル変数の上に, 用途が決まっている変数のため, param など簡単なものではなく, 他のユーザーと被らないような変数名にしたほうがよいかもしれません。
- セキュリティ上の不安があるならば, パラメータ呼び出し側では 値に制限をかけて使用するなどがよいかもしれません。また, このページでは参考サイトを応用し任意のページにも展開していますが, 参考サイトのとおり特定ページ上のみでの適用がよいかもしれません。