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

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

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

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

Q&A

解決済

1回答

1690閲覧

【Wordpress】Smart Custom Fieldsを使ったカスタムフィールドの値での絞り込み機能を実装したい

mksk

総合スコア247

WordPress

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

0グッド

0クリップ

投稿2019/07/20 07:55

編集2019/07/21 03:41

前提

  • Wordpressでファッションサイトを構築しています。
  • 投稿を使いコーディネートを公開します。
  • カスタムフィールドにはトップス(シャツ、ポロシャツなど)、ボトムス(ロングパンツ、ショートパンツなど)のカテゴリー名、性別、季節、カラーなどの情報が登録されます。
  • カスタムフィールドの値で絞り込み検索機能を実現したいと考えています。
  • カスタムフィールドにはSmart Custom Fieldsプラグインを使用しています。

Smart Custom Fields

  • Smart Custom Fieldsの繰り返し機能を使い、トップス、ボトムスなどの情報をカスタムフィールドを利用して登録します。(赤いシャツ、黒いパンツ、白い帽子など複数)
  • フロント画面では、絞り込み項目を複数用意し、選択しsubmitするとURLにパラメータをが付与され、その値を使った絞り込み機能を行います。

実現したいこと

  • 一つの条件で絞り込みをかけた時は正しく結果が返ってくるのですが、複数の条件で絞り込みたいときにうまく行きません。
  • 複数条件の絞り込み機能をどのように実現するのでしょうか?

試したこと

  • wp_queryのmeta_queryにカスタムフィールドを指定して条件に合致するものを抽出

→ 「赤いシャツ」のようなAND検索ではなく、「赤色」OR「シャツ」の結果が返ってきてしまう。

  • そこで、wp_queryで記事全件抽出 → 絞り込み条件に合致する記事を表示用配列に追加 → 表示用配列を回して記事を表示としました。
  • ただ、複数の条件で絞り込む際、どのように記述すればいいのかわかりません。

絞り込み条件分、if文を書くのも試しましたが、全パターンを網羅しようと思うと途方もなく、現実的ではないと思いました。

何かもっとシンプルな記載方法はないでしょうか?

よろしくお願いします。

具体的なコードは以下です。

wp_queryのmeta_queryにカスタムフィールドを指定して条件に合致するものを抽出

<?php // 絞り込み用パラメータを作成 $arr = []; if (isset($_GET['sex'])) { // 性別 $sArray = [ 'key' => 'sex', 'value' => $_GET['sex'], 'compare' => '=' ]; $arr[] = $sArray; } if (isset($_GET['season'])) { // 季節 $seasonArray = [ 'key' => 'season', 'value' => $_GET['season'], 'compare' => '=' ]; $arr[] = $seasonArray; } if (isset($_GET['item'])) { // アイテム $genreArray = [ 'key' => 'item', 'value' => $_GET['item'], 'compare' => '=' ]; $arr[] = $genreArray; } if (isset($_GET['color'])) { // カラー $colorArray = [ 'key' => 'color', 'value' => $_GET['color'], 'compare' => '=' ]; $arr[] = $colorArray; } // 投稿データを取得 $args = array( 'post_type' => 'post', 'posts_per_page' => 10, // 1ページ10件掲載する 'meta_query' => $argument ); $my_query = new WP_Query($args); while($my_query->have_posts()): $my_query->the_post(); // (以下ループ)

「赤いシャツ」のようなAND検索ではなく、「赤色」OR「シャツ」が返ってきました。

wp_queryで記事全件抽出 → 絞り込み条件に合致する記事を表示用配列に追加 → 表示用配列を回して記事を表示

// 投稿データを取得 $args = array( 'paged' => $paged, 'post_type' => 'post', 'posts_per_page' => -1, // 全件取得 ); $my_query = new WP_Query($args); $posts = $my_query->get_posts(); $array = []; // 表示用配列 foreach ($posts as $post) { $group = SCF::get('group'); // アイテムごとの繰り返しグループ $sex = SCF::get('sex'); $season = SCF::get('season'); $item = SCF::get('item'); $color = SCF::get('color'); foreach ( $group as $fields ) { if ($fields['sex'] == $_GET['sex'] && $fields['season'] == $_GET['season'] && $fields['item'] == $_GET['item'] && $fields['color'] == $_GET['color']) { $array[] = $fields; break; } if ($fields['sex'] == $_GET['sex'] && $fields['season'] == $_GET['season'] && $fields['item'] == $_GET['item']) { $array[] = $fields; break; } // ・・・(絞り込みパターン分繰り返し) }

絞り込みパターン分記述がしなければならないのでしょうか・・・?

よろしくお願いします。

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

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

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

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

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

CHERRY

2019/07/20 22:49

文章だけでは状況の判断が難しいと思いますので、具体的なコードを記載していただくことは可能でしょうか?
guest

回答1

0

自己解決

上記の「wp_queryで記事全件抽出 → 絞り込み条件に合致する記事を表示用配列に追加 → 表示用配列を回して記事を表示」の方法で対応しました。

ありがとうございました。

投稿2019/07/26 11:07

mksk

総合スコア247

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問