WordPressの記事一覧をURLパラメータでソートする方法
WordPressでsidebarからカテゴリの記事一覧へリンクし、カテゴリ毎に異なるソートオーダーにしたかったため、URLパラメータの指定でソート順を変更できないか調べてみた。 どうも、WordPressの標準の機能で、URLにorderby,orderを指定すると、ソートできるようだ。
http://www.xxx.com/category/dog?orderby=title&order=DESC
指定できるパラメータは次のURLで確認できる。
Order & Orderby Parameters WP_Query | Class | WordPress Developer Resources
ただし今回はWelcartの商品コードのカスタムフィールドでソートをしたい。
残念ながらorderby=meta_value
を指定してmeta_key
を設定してもソートされない。
NG。ソートされない。
http://www.xxx.com/category/item?orderby=meta_value&order=DESC&meta_key=_itemCode
WordPressのソースclass-wp.php:265, WP->parse\_request()
では、WP::public_query_vars
に格納されていないURLパラメータは取り込まないようだ。
public_query_vars
に入っているのは次の値。
class WP {
/**
* Public query variables.
*
* Long list of public query variables.
*
* @since 2.0.0
* @access public
* @var array
*/
var $public_query_vars = array(
'm',
'p',
'posts',
'w',
'cat',
'withcomments',
'withoutcomments',
's',
'search',
'exact',
'sentence',
'calendar',
'page',
'paged',
'more',
'tb',
'pb',
'author',
'order',
'orderby',
'year',
'monthnum',
'day',
'hour',
'minute',
'second',
'name',
'category_name',
'tag',
'feed',
'author_name',
'static',
'pagename',
'page_id',
'error',
'comments_popup',
'attachment',
'attachment_id',
'subpost',
'subpost_id',
'preview',
'robots',
'taxonomy',
'term',
'cpage',
'post_type'
);
・
・
・
よく見るとその直前に、query_vars
フィルタがある。
これで追加することもできそうだ。
$this->public_query_vars = apply_filters( 'query_vars', $this->public_query_vars );
試しに、functions.phpにフィルタを追加。すると、ソートできた!
add_filter('query_vars', 'my_query_vars', 9);
function my_query_vars( $qvars ){
$qvars[] = 'meta_key';
return $qvars;
}
ここまでくると
-
query_varsフィルターで独自のパラメーターを追加。
-
pre_get_postsで自前のソート条件を指定。
で結構自由にソートできるのではないだろうか?
と思ったら、すでに実現されている方が! 素晴らしい! WordPress のURLクエリストリングにカスタムフィールドを指定して絞り込み検索する | wpxtreme