teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コメントでのリクエストを受けて追記 2019/03/14 を追加しました。

2019/03/14 14:30

投稿

gh640
gh640

スコア1407

answer CHANGED
@@ -36,4 +36,100 @@
36
36
 
37
37
  ちなみに `WP_Query` の使い方については Codex 上でとても詳しく説明されているので一度目を通されてみてください :D
38
38
 
39
- - [Class Reference/WP Query « WordPress Codex](https://codex.wordpress.org/Class_Reference/WP_Query)
39
+ - [Class Reference/WP Query « WordPress Codex](https://codex.wordpress.org/Class_Reference/WP_Query)
40
+
41
+ ### 追記 2019/03/14
42
+
43
+ > 単体では検索にヒットしますが、確かに複数指定するとヒットしません。
44
+ > 引き続き調べながら作業しますが、ループ処理に関してヒントとなるものはありますでしょうか?
45
+
46
+ 上 ↑ でご紹介した Codex のページはご覧になりましたか?そこにそのままズバリなヒントが載っていますので、もしまだお読みになっていなければ読んでみてください。
47
+
48
+ 上 ↑ の Codex のページの該当箇所をかんたんに解説しますね。 2 つの例が紹介されています。
49
+
50
+ ```php
51
+ $args = array(
52
+ 'post_type' => 'product',
53
+ 'meta_query' => array(
54
+ 'relation' => 'OR',
55
+ array(
56
+ 'key' => 'color',
57
+ 'value' => 'blue',
58
+ 'compare' => 'NOT LIKE',
59
+ ),
60
+ array(
61
+ 'key' => 'price',
62
+ 'value' => array( 20, 100 ),
63
+ 'type' => 'numeric',
64
+ 'compare' => 'BETWEEN',
65
+ ),
66
+ ),
67
+ );
68
+ $query = new WP_Query( $args );
69
+ ```
70
+
71
+ ひとつめ ↑ は「 投稿タイプ `product` の投稿のうち、【カスタムフィールド `color` の値が `blue` ではないもの】と【カスタムフィールド `price` の値が 20 〜 100 の間のもの】 」を取得するサンプルです。
72
+
73
+ ```php
74
+ $args = array(
75
+ 'post_type' => 'product',
76
+ 'meta_query' => array(
77
+ 'relation' => 'OR',
78
+ array(
79
+ 'key' => 'color',
80
+ 'value' => 'orange',
81
+ 'compare' => '=',
82
+ ),
83
+ array(
84
+ 'relation' => 'AND',
85
+ array(
86
+ 'key' => 'color',
87
+ 'value' => 'red',
88
+ 'compare' => '=',
89
+ ),
90
+ array(
91
+ 'key' => 'size',
92
+ 'value' => 'small',
93
+ 'compare' => '=',
94
+ ),
95
+ ),
96
+ ),
97
+ );
98
+ $query = new WP_Query( $args );
99
+ ```
100
+
101
+ ふたつめのこちら ↑ は「 投稿タイプ `product` の投稿のうち、【カスタムフィールド `color` が `orange` のもの】と【カスタムフィールド `color` が `red` でカスタムフィールド `size` が `small` のもの】 」を取得するサンプルです。
102
+
103
+ ロジックと実際のコードの構成を見比べて、ご自身の場合だとどのように書けばよいか、考えてみてください。
104
+
105
+ 「ループ」というのは、クライアントから送られた `market` や `use` (いずれも配列)に対してループを回して、最終的に `meta_query` をこのような形で組むということです。
106
+
107
+ 「ループ」と言いましたが、もし完全一致( `=` )での検索でよいのであれば、次のような感じで `IN` を使えばループを回さなくてもいけるかもしれません(あくまでもイメージです)。
108
+
109
+ ```php
110
+ $args = [
111
+ // ...
112
+ ];
113
+
114
+ $meta_query_market = [
115
+ 'key' => 'market',
116
+ 'value' => $market,
117
+ 'compare' => 'IN',
118
+ ];
119
+
120
+ $meta_query_use = [
121
+ 'key' => 'use',
122
+ 'value' => $use,
123
+ 'compare' => 'IN',
124
+ ];
125
+
126
+ $meta_query = [
127
+ 'relation' => 'AND',
128
+ $meta_query_market,
129
+ $meta_query_use,
130
+ ];
131
+
132
+ $args['meta_query'] = $meta_query;
133
+ ```
134
+
135
+ この説明でもどうもよくわからないなという場合は、 Codex をまずは丹念に読んでみることをおすすめします。というのと、これ以上は WordPress というよりは PHP の知識の問題だと思いますので、 PHP でのループの回し方等をお調べになってください。がんばってください :D