質問: 投稿の一覧表示をするうえで、表示順を変更したいです。 --- ■カスタム投稿:ブランド名(brand_name) カスタムフィールド フィールド名:ranking フィールドタイプ:数値 ■カスタム投稿:店舗名(brand_shop) ※追記 カスタムフィールド 必須 フィールド名:関連ブランド(relation_brand) フィールドタイプ:投稿オブジェクト --- 上記2点のカスタム投稿を持っていて、店舗名(brand_shop)は投稿オブジェクトによってブランド名(brand_name)の情報を共有しています。(投稿ID) 店舗名(brand_shop)の一覧表示をする時、ブランド名(brand_name)がもっているランキング順(1位から降順に)に並べたいのですが、どう表記していいのでしょうか。※rankingが空のものもランキング最下位以降に表示します。(特に並び順に指定なし) ブランド名で並び替えるのでされば、下記ので事足りるとは思うのですが...。 query_posts( array( 'post_type' => 'brand_name', 'posts_per_page' =>-1, 'orderby' => 'meta_value_num', 'order' => 'desc', 'meta_key' => 'ranking' ) ); 手助けしていただけると嬉しいです。 よろしくお願いします。 -----------------------------― 追記 ループの流れ的には ブランド名のランキング順のIDの配列をつくる。 ↓↓ 店舗名のquery_postsで 上で取得した配列のIDをmeta_queryで絞って順番に出す といった感じなんでしょうか。 間違っていたらすいません。
回答: 質問文に追記された方法で実現可能だと思うので、 その方向で実装されるのがよいと思います。 (多分データベースを直接たたけばもう少しシンプルに取得できると思いますが) イメージは以下のような感じです。 (**未検証**なのでそのまま動かすとエラーが出ると思います。あくまでイメージです) ``` /* 未検証 */ //////////////////////////// // ブランド名のランキング順のIDの配列をつくる $args = array( 'post_type' => 'brand_name', 'meta_key' => 'ranking ', 'orderby' => 'meta_value_num', 'order' => 'ASC', ); $query = new WP_Query( $args ); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); $brand_ids[] = get_the_ID(); endwhile; wp_reset_postdata(); endif; //////////////////////////// // 各ブランドごとの店舗を出力 foreach($brand_ids as $brand_id) : $args = array( 'post_type' => 'brand_shop', 'meta_key' => 'relation_brand', 'meta_value' => $brand_id ); $query = new WP_Query( $args ); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); //ここで店舗情報を出力 endwhile; wp_reset_postdata(); endif; endforeach; ```