WordPressの$query_stringを配列にして使用する
ちょこっとしたものを作っている際に、WordPressのグローバル変数である$query_stringを配列にして使用したくなったので覚書き。
通常、$query_stringは単なる文字列だし、これを配列に代替するような関数も用意されていないので、こいつを配列化しようとするならちょっと工夫してあげる必要がある。
やり方的にはPHPの文字列処理関数であるparse_str()を利用するだけなので至ってかんたん・・・と思いきや、少しだけ落とし穴がある。
普通にparse_str()をかけるだけだと、検索フォームを何も入力しないで検索アーカイブを表示した際に、sのパラメータが配列化されず、空データとなる。
それを回避するために、以下のような形で行うようにする。
function theme_query_array() { global $query_string; $query_array = $query_string; if ( isset( $_GET['s'] ) && '' == get_search_query() ) $query_array = 's=&' . $query_array; parse_str( $query_array, $query_array ); return $query_array; }
以上で、空検索時の問題を回避しつつ、$query_stringを配列にすることが可能。
用途としては、query_posts()を配列で指定したい場合や、WP_Queryオブジェクトの配列の指定するときに、自分で用意した配列へarray_merge()等で上記の関数を結合して使用する。
ちなみに、これらのWordPressのクエリ関数で指定できるパラメータは、$query_stringで出されるパラメータ値と一致している。豆知識として覚えておくといいかも。
生の$query_stringだと可読性が悪いので、そういった場合は重宝すると思う。
ただ、このコードと記事を書くまで$query_stringは存在すら忘れるレベルで殆ど使ってなかったりしたのはここだけの話。
・・・で、この件に関係ないぼやきを少し。
GWと延長線上の次の土曜は日帰りでツーリングに出かけたんだけど、撮ってきた画像が多すぎて、なかなか上げるに上げられない(´・ω・`)