回答編集履歴

1

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

2019/03/14 14:30

投稿

gh640
gh640

スコア1407

test CHANGED
@@ -75,3 +75,195 @@
75
75
 
76
76
 
77
77
  - [Class Reference/WP Query « WordPress Codex](https://codex.wordpress.org/Class_Reference/WP_Query)
78
+
79
+
80
+
81
+ ### 追記 2019/03/14
82
+
83
+
84
+
85
+ > 単体では検索にヒットしますが、確かに複数指定するとヒットしません。
86
+
87
+ > 引き続き調べながら作業しますが、ループ処理に関してヒントとなるものはありますでしょうか?
88
+
89
+
90
+
91
+ 上 ↑ でご紹介した Codex のページはご覧になりましたか?そこにそのままズバリなヒントが載っていますので、もしまだお読みになっていなければ読んでみてください。
92
+
93
+
94
+
95
+ 上 ↑ の Codex のページの該当箇所をかんたんに解説しますね。 2 つの例が紹介されています。
96
+
97
+
98
+
99
+ ```php
100
+
101
+ $args = array(
102
+
103
+ 'post_type' => 'product',
104
+
105
+ 'meta_query' => array(
106
+
107
+ 'relation' => 'OR',
108
+
109
+ array(
110
+
111
+ 'key' => 'color',
112
+
113
+ 'value' => 'blue',
114
+
115
+ 'compare' => 'NOT LIKE',
116
+
117
+ ),
118
+
119
+ array(
120
+
121
+ 'key' => 'price',
122
+
123
+ 'value' => array( 20, 100 ),
124
+
125
+ 'type' => 'numeric',
126
+
127
+ 'compare' => 'BETWEEN',
128
+
129
+ ),
130
+
131
+ ),
132
+
133
+ );
134
+
135
+ $query = new WP_Query( $args );
136
+
137
+ ```
138
+
139
+
140
+
141
+ ひとつめ ↑ は「 投稿タイプ `product` の投稿のうち、【カスタムフィールド `color` の値が `blue` ではないもの】と【カスタムフィールド `price` の値が 20 〜 100 の間のもの】 」を取得するサンプルです。
142
+
143
+
144
+
145
+ ```php
146
+
147
+ $args = array(
148
+
149
+ 'post_type' => 'product',
150
+
151
+ 'meta_query' => array(
152
+
153
+ 'relation' => 'OR',
154
+
155
+ array(
156
+
157
+ 'key' => 'color',
158
+
159
+ 'value' => 'orange',
160
+
161
+ 'compare' => '=',
162
+
163
+ ),
164
+
165
+ array(
166
+
167
+ 'relation' => 'AND',
168
+
169
+ array(
170
+
171
+ 'key' => 'color',
172
+
173
+ 'value' => 'red',
174
+
175
+ 'compare' => '=',
176
+
177
+ ),
178
+
179
+ array(
180
+
181
+ 'key' => 'size',
182
+
183
+ 'value' => 'small',
184
+
185
+ 'compare' => '=',
186
+
187
+ ),
188
+
189
+ ),
190
+
191
+ ),
192
+
193
+ );
194
+
195
+ $query = new WP_Query( $args );
196
+
197
+ ```
198
+
199
+
200
+
201
+ ふたつめのこちら ↑ は「 投稿タイプ `product` の投稿のうち、【カスタムフィールド `color` が `orange` のもの】と【カスタムフィールド `color` が `red` でカスタムフィールド `size` が `small` のもの】 」を取得するサンプルです。
202
+
203
+
204
+
205
+ ロジックと実際のコードの構成を見比べて、ご自身の場合だとどのように書けばよいか、考えてみてください。
206
+
207
+
208
+
209
+ 「ループ」というのは、クライアントから送られた `market` や `use` (いずれも配列)に対してループを回して、最終的に `meta_query` をこのような形で組むということです。
210
+
211
+
212
+
213
+ 「ループ」と言いましたが、もし完全一致( `=` )での検索でよいのであれば、次のような感じで `IN` を使えばループを回さなくてもいけるかもしれません(あくまでもイメージです)。
214
+
215
+
216
+
217
+ ```php
218
+
219
+ $args = [
220
+
221
+ // ...
222
+
223
+ ];
224
+
225
+
226
+
227
+ $meta_query_market = [
228
+
229
+ 'key' => 'market',
230
+
231
+ 'value' => $market,
232
+
233
+ 'compare' => 'IN',
234
+
235
+ ];
236
+
237
+
238
+
239
+ $meta_query_use = [
240
+
241
+ 'key' => 'use',
242
+
243
+ 'value' => $use,
244
+
245
+ 'compare' => 'IN',
246
+
247
+ ];
248
+
249
+
250
+
251
+ $meta_query = [
252
+
253
+ 'relation' => 'AND',
254
+
255
+ $meta_query_market,
256
+
257
+ $meta_query_use,
258
+
259
+ ];
260
+
261
+
262
+
263
+ $args['meta_query'] = $meta_query;
264
+
265
+ ```
266
+
267
+
268
+
269
+ この説明でもどうもよくわからないなという場合は、 Codex をまずは丹念に読んでみることをおすすめします。というのと、これ以上は WordPress というよりは PHP の知識の問題だと思いますので、 PHP でのループの回し方等をお調べになってください。がんばってください :D