こんにちは。

WordPressをCMS利用してたりすると、たまにやたら複雑な絞り込みなんかを行う必要がでてきたりすることがあります。

そんな時に便利な関数を知ったので次使うときのためのメモです。

早速ですが問題です。

例えば、たくさんの商品を扱うお店のサイトで、取り扱い商品の一覧を表示するページがあったとします。

そこにはカテゴリーで絞り込み、タグで絞り込み、といった絞り込み用リンクに加えて新着順ソート、価格順ソート、レーティングでソートといったソート用のURLも用意されていて、それぞれ「?category=1」や「?sort=price」といった制御用パラメータを持っているとします。

この状態で、カテゴリーで絞り込みつつ価格順ソートをしたい場合は、
「?category=1&sort=price」となりますよね?

基本的にはこれを実現するためには、おそらく、$_GET でデータを受信して、条件分岐を作るんですが、問題は、動的に変化するリンクのほうです。

これは今の目的となるパラメータに加えて、現在すでにURLクエリにセットされているパラメータも考慮しなくてはなりませんね。じゃないとソートリンクを踏んだら絞り込みが消えるなんて自体になってしまいます。

さて、そうなると例えばソート状態は維持したままカテゴリーを変更したり、カテゴリ絞り込みはやめてタグで絞り込みたい場合、考えられるURLのパターンはいくつ有るでしょうか?(もちろん絞り込みが先の場合もあれば、ソートが先の場合もあります。)

答えは…えーっと…いっぱいです。

絞り込みに利用したいデータの個数にもよりますが、なんとも計算したくないくらい沢山のパターンがおもいつきます。これを状況に合わせて動的にURLを生成させるのはなかなかに面倒くさそうです。

でも、そんな時に便利な関数がWordPressには用意されています。

それが add_query_arg() という関数です。

add_query_arg()の使い方

最も簡単な使い方ですが、
引数にURLに付けたいパラメータを「パラメータ名 => 値」という形の配列で渡してあげると、そのパラメータをURLクエリに追加する際に、現在のURLの状況に応じて付け変えてくれます。

例えば、

みたいにすると、自動的に「list/?category=cat1」みたいなリンクをつくってくれます。

既に他のパラメータがURLにセットされている場合は、「list?category=cat1&sort=price」みたいにきちんとつなげてくれます。

現在のページの状況に応じて動的にURLを変更させる必要がある場合は、便利です。

因みにセットされてるパラメータを解除するには、解除したいパラメータに対して false という値をセットすればOKです。

因みにこの関数、他に2つほど引数があり、それらも使えばもっと高度なことも出来る筈です。興味が有る方は Codex を参照してみてください。

あ、因みにセットするパラメータは複数でもOKです。一部だけ解除とかもできますよ。

参考:

Function Reference/add query arg « WordPress Codex

コメントする