質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

3571閲覧

wordpress:投稿の表示順(別カスタム投稿のカスタムフィールド順)

as0620

総合スコア7

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2017/04/24 07:24

編集2017/04/25 02:50

投稿の一覧表示をするうえで、表示順を変更したいです。


■カスタム投稿:ブランド名(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で絞って順番に出す

といった感じなんでしょうか。
間違っていたらすいません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/24 13:53

ひとつのbrand_shopがひもづくbrand_nameは常にひとつでしょうか。
as0620

2017/04/25 02:08 編集

そうです!1ブランドを必須で紐づいている状態です。
guest

回答1

0

ベストアンサー

質問文に追記された方法で実現可能だと思うので、
その方向で実装されるのがよいと思います。
(多分データベースを直接たたけばもう少しシンプルに取得できると思いますが)

イメージは以下のような感じです。
(未検証なのでそのまま動かすとエラーが出ると思います。あくまでイメージです)

PHP

1/* 未検証 */ 2//////////////////////////// 3// ブランド名のランキング順のIDの配列をつくる 4$args = array( 5 'post_type' => 'brand_name', 6 'meta_key' => 'ranking ', 7 'orderby' => 'meta_value_num', 8 'order' => 'ASC', 9); 10$query = new WP_Query( $args ); 11if ( $the_query->have_posts() ) : 12 while ( $the_query->have_posts() ) : $the_query->the_post(); 13 $brand_ids[] = get_the_ID(); 14 endwhile; 15 wp_reset_postdata(); 16endif; 17 18//////////////////////////// 19// 各ブランドごとの店舗を出力 20foreach($brand_ids as $brand_id) : 21 22 $args = array( 23 'post_type' => 'brand_shop', 24 'meta_key' => 'relation_brand', 25 'meta_value' => $brand_id 26 ); 27 $query = new WP_Query( $args ); 28 if ( $the_query->have_posts() ) : 29 while ( $the_query->have_posts() ) : $the_query->the_post(); 30 //ここで店舗情報を出力 31 endwhile; 32 wp_reset_postdata(); 33 endif; 34 35endforeach;

投稿2017/04/25 07:39

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

as0620

2017/04/26 08:33

うまく表示することができました! とてもたすかりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問