サポート » 使い方全般 » カスタムフィールドでソートした後に、日付の降順にしたい

  • 解決済 myojo1

    (@myojo1)


    こんにちは。

    query_postsを使用して記事を取得する時に、カスタムフィールドのキーでソートした後、投稿日付の降順で表示したいと思っています。

    このフォーラムの古い投稿でorderbyには半角スペースで複数キーが設定できるという投稿を見つけたので下記のコードを試してみましたが、日付の順にはなりません。

    query_posts('orderby' => 'meta_value_num date',
    	'order' => 'DESC DESC',
    	'meta_key' => 'promotion_level' ) );

    どなたかやり方をご存知のかた、いらっしゃいましたらよろしくおねがします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 複数指定で使ったことないですけど、複数指定する場合ならデリミタは「,」になるのでは?
    試して無いので、取れるかは不明です。

    $args = array(
    	'meta_key'	=> 'promotion_level',
    	'orderby'	=> 'meta_value_num, date',
    	'order'		=> 'DESC, DESC'
    );
    query_posts( $args );
    トピック投稿者 myojo1

    (@myojo1)

    c2nprdsさん

    レスありがとうございます。
    残念ながらデリミタを「,」にしても駄目でした。

    全く同じ問題で行き詰まり、ここに辿り着きました。
    同じく、半角スペースでもコロンでもうまく動きません。
    過去のバージョンでは動いたということですかね…?

    ■現状
    仕様かバグかはわかりませんが、WP3辺りのソースでは
    ・orderby は半角スペース区切りで複数指定可能
    ・order は DESC か ASC 1つのみ指定可能
    で orderby で指定した最後のフィールドのみに order が適用されます。

    今回の場合なら
    ORDER BY meta_value_num, date DESC
    となります(イメージ)ので
    promotion_level 昇順 –> date 降順
    でソートされます。

    ■対処
    functions.php に以下を追加します。

    add_filter('posts_orderby','my_posts_orderby', 10, 2);
    function my_posts_orderby( $orderby, $query ) {
      $orders = explode( ' ', strtoupper( $query->get( 'myorder' ) ) );
      if ( 0 < count( $orders ) ) {
        $orderby_array = array();
        foreach ( explode( ',', str_replace( ' DESC', '', $orderby ) ) as $i => $the_orderby ) {
          if ( ! isset( $orders[$i] ) || ! in_array( $orders[$i], array( 'ASC', 'DESC') ) )
            $orderby_array[] = $the_orderby . ' DESC' ;
          else
            $orderby_array[] = $the_orderby . ' ' . $orders[$i];
        }
        $orderby = implode( ',', $orderby_array );
      }
      return $orderby;
    }

    query_posts で order の指定を myorder に変更します。

    $args = array(
      'meta_key'	=> 'promotion_level',
      'orderby'	=> 'meta_value_num date',
      'myorder'	=> 'DESC DESC'
    );
    query_posts( $args );

    で OK!

    トピック投稿者 myojo1

    (@myojo1)

    kzさん

    詳細な説明ありがとうございます!
    やはり現状だと複数ソートが効かないのですね。

    教えていただいた対処方法を試したところ、
    無事に第2ソートキーを設定することが出来ました。

    大変助かりました。ありがとうございました!

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「カスタムフィールドでソートした後に、日付の降順にしたい」には新たに返信することはできません。