Title: カスタムフィールドでソートした後に、日付の降順にしたい
Last modified: 2016年7月30日

---

# カスタムフィールドでソートした後に、日付の降順にしたい

 *  解決済 [myojo1](https://ja.wordpress.org/support/users/myojo1/)
 * (@myojo1)
 * [15年、 3ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%a7%e3%82%bd%e3%83%bc%e3%83%88%e3%81%97%e3%81%9f%e5%be%8c%e3%81%ab%e3%80%81%e6%97%a5%e4%bb%98%e3%81%ae%e9%99%8d/)
 * こんにちは。
 * query_postsを使用して記事を取得する時に、カスタムフィールドのキーでソートした
   後、投稿日付の降順で表示したいと思っています。
 * このフォーラムの古い投稿でorderbyには半角スペースで複数キーが設定できるという
   投稿を見つけたので下記のコードを試してみましたが、日付の順にはなりません。
 *     ```
       query_posts('orderby' => 'meta_value_num date',
       	'order' => 'DESC DESC',
       	'meta_key' => 'promotion_level' ) );
       ```
   
 * どなたかやり方をご存知のかた、いらっしゃいましたらよろしくおねがします。

5件の返信を表示中 - 1 - 5件目 (全5件中)

 *  [c2nprds](https://ja.wordpress.org/support/users/c2nprds/)
 * (@c2nprds)
 * [15年、 3ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%a7%e3%82%bd%e3%83%bc%e3%83%88%e3%81%97%e3%81%9f%e5%be%8c%e3%81%ab%e3%80%81%e6%97%a5%e4%bb%98%e3%81%ae%e9%99%8d/#post-140478)
 * 複数指定で使ったことないですけど、複数指定する場合ならデリミタは「,」になるの
   では？
    試して無いので、取れるかは不明です。
 *     ```
       $args = array(
       	'meta_key'	=> 'promotion_level',
       	'orderby'	=> 'meta_value_num, date',
       	'order'		=> 'DESC, DESC'
       );
       query_posts( $args );
       ```
   
 *  トピック投稿者 [myojo1](https://ja.wordpress.org/support/users/myojo1/)
 * (@myojo1)
 * [15年、 3ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%a7%e3%82%bd%e3%83%bc%e3%83%88%e3%81%97%e3%81%9f%e5%be%8c%e3%81%ab%e3%80%81%e6%97%a5%e4%bb%98%e3%81%ae%e9%99%8d/#post-140531)
 * c2nprdsさん
 * レスありがとうございます。
    残念ながらデリミタを「,」にしても駄目でした。
 *  [ghorski](https://ja.wordpress.org/support/users/ghorski/)
 * (@ghorski)
 * [15年、 2ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%a7%e3%82%bd%e3%83%bc%e3%83%88%e3%81%97%e3%81%9f%e5%be%8c%e3%81%ab%e3%80%81%e6%97%a5%e4%bb%98%e3%81%ae%e9%99%8d/#post-140627)
 * 全く同じ問題で行き詰まり、ここに辿り着きました。
    同じく、半角スペースでもコロン
   でもうまく動きません。 過去のバージョンでは動いたということですかね…？
 *  [kz](https://ja.wordpress.org/support/users/kz/)
 * (@kz)
 * [15年、 2ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%a7%e3%82%bd%e3%83%bc%e3%83%88%e3%81%97%e3%81%9f%e5%be%8c%e3%81%ab%e3%80%81%e6%97%a5%e4%bb%98%e3%81%ae%e9%99%8d/#post-140628)
 * ■現状
    仕様かバグかはわかりませんが、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](https://ja.wordpress.org/support/users/myojo1/)
 * (@myojo1)
 * [15年、 2ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%a7%e3%82%bd%e3%83%bc%e3%83%88%e3%81%97%e3%81%9f%e5%be%8c%e3%81%ab%e3%80%81%e6%97%a5%e4%bb%98%e3%81%ae%e9%99%8d/#post-140634)
 * kzさん
 * 詳細な説明ありがとうございます！
    やはり現状だと複数ソートが効かないのですね。
 * 教えていただいた対処方法を試したところ、
    無事に第2ソートキーを設定することが
   出来ました。
 * 大変助かりました。ありがとうございました！

5件の返信を表示中 - 1 - 5件目 (全5件中)

 トピック「カスタムフィールドでソートした後に、日付の降順にしたい」には新たに返信
することはできません。

 * フォーラム: [使い方全般](https://ja.wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 5件の返信
 * 4人の参加者
 * 最後の返信者: [myojo1](https://ja.wordpress.org/support/users/myojo1/)
 * 最後の活動: [15年、 2ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%81%a7%e3%82%bd%e3%83%bc%e3%83%88%e3%81%97%e3%81%9f%e5%be%8c%e3%81%ab%e3%80%81%e6%97%a5%e4%bb%98%e3%81%ae%e9%99%8d/#post-140634)
 * 状態: 解決済

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
