WordPress4.0から使えるようになった複雑な’oderby’を使ってみる

クエリーのパラメータに以前より指定した項目の値で投稿をソートする’orderby’というのがありました。記事の表示一覧などを作成するときに、表示順を指定したりするのに使用しますが、WordPress4.0からこのパラメータに複数の値を指定できるようになっています。どういう風に強化されたかというと、例えばタイトルと日付の2つの値で表示順を指定できるので、タイトルは昇順で日付は降順をいった指定ができます。指定は以下のようにします。

$args = array(
    'orderby' => array( 'title' => 'ASC', ‘date' => 'DESC' )
);
$query = new WP_Query( $args );

この場合どのように並ぶかというと、左の記述から優先的に並べるので、例えば同じタイトルが複数あった場合は(同じタイトルの中で)日付の新しいもの順に並べるといった感じです。

これはカスタムフィールドの値を使ってもソートすることができるので、例えば”値段(price)”というカスタムフィールドがあるとした時に以下を指定した場合は、値段が高い順で並べて同じ値段のものはタイトルが昇順で並びます。

$args = array(
    'orderby' => array( 'meta_value_num' => 'DESC', 'title' => 'ASC' ),
    'meta_key' => ‘price'
);
$query = new WP_Query( $args );

またクエリー条件のある複数のカスタムフィールドを使用している場合などは、クエリーのパラメータに名前を付けてoderbyを指定することができます。

$args = array(
    'orderby' => array( 'meta_recommend' => 'ASC', 'meta_price' => 'DESC' ),
    ‘meta_query’ => array(
        'relation' => 'AND',
        'meta_price'=>array(
        'key'     => ‘price',
        'value'   => ‘3000',
        'compare' => '<=',
        'type'    => ’numeric',
        ),
        'meta_recommend'=>array(
        'key'     => 'recommend',
        'value'   => ‘5',
        'compare' => '>=',
        'type'    => 'numeric',
        ),
    ),
);
$query = new WP_Query( $args );

この例はカスタムフィールド’redommend’が5以上かつ、’price’が3000以下の記事を抽出し、’recommend’は昇順で’price’は降順で並べるといった指定となります。
これらを使うとより複雑なクエリー条件とソートの指定が可能となります。