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

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

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

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

Q&A

解決済

1回答

776閲覧

カスタム投稿を取得する際、カスタムフィールドの値で絞りこみたい

hiro..

総合スコア79

WordPress

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

0グッド

0クリップ

投稿2021/03/30 10:57

編集2021/03/30 11:25

お世話になっております。

固定ページにカスタム投稿「店舗一覧(shops)」から、カスタムフィールド値「店舗ジャンル」に「飲食店(スラッグ:restaurant id:20)」
という値を持った投稿のみを5件取得する、

ということを実現したいのですが、うまくいかず悩んでおります。

php

1 $args = array( 2 'posts_per_page' => 5, 3 'post_type' => 'shops', 4 5 ); 6 7 $rand_posts = get_posts($args); 8 var_dump($rand_posts); 9

これで変数の中身を確認すると、ひとまず店舗一覧から5件取得できていることがわかりました。

そこから絞り込みをすると、うなくいかないのです。

php

1 $args = array( 2 'posts_per_page' => 5, 3 'post_type' => 'shops', 4 'meta_key' => '店舗ジャンル', 5 'meta_value' => 20, 6 ); 7 8 $rand_posts = get_posts($args); 9 var_dump($rand_posts);

こうすると取得件数は0となってしまいます。

https://cotodama.co/custom-field_list/
などを参考に、
'meta_query'を使ってみても、だめでした。

該当のカスタムフィールドはプラグインで作成されており、
フィールド名:店舗ジャンル
フィールドタイプ:タクソノミー
返り値:タームID

となっております。

実際絞り込みをせずshopsの投稿を取得して、ループの中でフィールドの値を表示させてみると、

php

1 foreach ($rand_posts as $post) : 2 setup_postdata($post); 3 $tagu = get_field('店舗ジャンル')[0]; 4 echo $tagu; //20 5 endforeach 6

20と表示されます。
この20は、
イメージ説明

ダッシュボードの店舗ジャンル一覧でマウスオーバーした際表示されるidと一致しています。

指定の仕方か、根本的になにか間違っているのでしょうか。
どなたかヒントをいただけましたら幸いです。
よろしくお願いいたします。

=====追記です
'meta_value' => 20, は数値を指定しているので

php

1 'meta_value_num' => 20,

と変更すると、絞り込みが全く行われない状態で店舗一覧の投稿が取得されました。

php

1'meta_value' => 'restaurant', //スラッグ

とすると、取得は0件になります。。

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

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

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

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

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

guest

回答1

0

自己解決

解決しましたー!!

meta_queryではなくtax_queryを使用して、かつ

'posts_per_page' => 4, 'post_type' => 'shops', 'tax_query' => array( array( 'taxonomy' => 'shop_genre', 'field' => 'slug', 'terms' => 'florist', //タクソノミーターム ), ) ) );

上記のように指定するとうまくいきました。
最初tax_queryも使っていたのですが、taxnomyをフィールド名で指定したためうまくいかなかったようです。

投稿2021/03/30 11:38

hiro..

総合スコア79

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問