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

質問編集履歴

1

具体的なコードを記述しました。

2019/07/21 03:41

投稿

mksk
mksk

スコア247

title CHANGED
File without changes
body CHANGED
@@ -26,4 +26,97 @@
26
26
 
27
27
  何かもっとシンプルな記載方法はないでしょうか?
28
28
 
29
+ よろしくお願いします。
30
+
31
+
32
+ 具体的なコードは以下です。
33
+
34
+ ## wp_queryのmeta_queryにカスタムフィールドを指定して条件に合致するものを抽出
35
+
36
+ ```
37
+ <?php
38
+ // 絞り込み用パラメータを作成
39
+ $arr = [];
40
+ if (isset($_GET['sex'])) { // 性別
41
+ $sArray = [
42
+ 'key' => 'sex',
43
+ 'value' => $_GET['sex'],
44
+ 'compare' => '='
45
+ ];
46
+ $arr[] = $sArray;
47
+ }
48
+ if (isset($_GET['season'])) { // 季節
49
+ $seasonArray = [
50
+ 'key' => 'season',
51
+ 'value' => $_GET['season'],
52
+ 'compare' => '='
53
+ ];
54
+ $arr[] = $seasonArray;
55
+ }
56
+ if (isset($_GET['item'])) { // アイテム
57
+ $genreArray = [
58
+ 'key' => 'item',
59
+ 'value' => $_GET['item'],
60
+ 'compare' => '='
61
+ ];
62
+ $arr[] = $genreArray;
63
+ }
64
+ if (isset($_GET['color'])) { // カラー
65
+ $colorArray = [
66
+ 'key' => 'color',
67
+ 'value' => $_GET['color'],
68
+ 'compare' => '='
69
+ ];
70
+ $arr[] = $colorArray;
71
+ }
72
+
73
+ // 投稿データを取得
74
+ $args = array(
75
+ 'post_type' => 'post',
76
+ 'posts_per_page' => 10, // 1ページ10件掲載する
77
+ 'meta_query' => $argument
78
+ );
79
+ $my_query = new WP_Query($args);
80
+ while($my_query->have_posts()): $my_query->the_post();
81
+ // (以下ループ)
82
+ ```
83
+
84
+ 「赤いシャツ」のようなAND検索ではなく、「赤色」OR「シャツ」が返ってきました。
85
+
86
+
87
+ ## wp_queryで記事全件抽出 → 絞り込み条件に合致する記事を表示用配列に追加 → 表示用配列を回して記事を表示
88
+
89
+ ```
90
+ // 投稿データを取得
91
+ $args = array(
92
+ 'paged' => $paged,
93
+ 'post_type' => 'post',
94
+ 'posts_per_page' => -1, // 全件取得
95
+ );
96
+ $my_query = new WP_Query($args);
97
+ $posts = $my_query->get_posts();
98
+ $array = []; // 表示用配列
99
+
100
+ foreach ($posts as $post) {
101
+ $group = SCF::get('group'); // アイテムごとの繰り返しグループ
102
+ $sex = SCF::get('sex');
103
+ $season = SCF::get('season');
104
+ $item = SCF::get('item');
105
+ $color = SCF::get('color');
106
+
107
+ foreach ( $group as $fields ) {
108
+ if ($fields['sex'] == $_GET['sex'] && $fields['season'] == $_GET['season'] && $fields['item'] == $_GET['item'] && $fields['color'] == $_GET['color']) {
109
+ $array[] = $fields;
110
+ break;
111
+ }
112
+ if ($fields['sex'] == $_GET['sex'] && $fields['season'] == $_GET['season'] && $fields['item'] == $_GET['item']) {
113
+ $array[] = $fields;
114
+ break;
115
+ }
116
+ // ・・・(絞り込みパターン分繰り返し)
117
+ }
118
+ ```
119
+
120
+ 絞り込みパターン分記述がしなければならないのでしょうか・・・?
121
+
29
122
  よろしくお願いします。