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

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

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

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

Q&A

解決済

1回答

2103閲覧

【wordpress】seachform.phpで複数のカスタムフィールドの値でAND検索するとき、空白で送られた項目があるときの検索結果の表示方法

tagu5959

総合スコア41

WordPress

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

0グッド

0クリップ

投稿2017/07/28 02:55

編集2017/07/28 03:05

いつもお世話になっております。

Wordpressの検索結果ページで以下のようなことで詰まっております。

【やりたいこと】
searchform.php で

php

1<input type="text" name="s" id="s" placeholder="検索" />//検索ワード 2<input type="text" name="product_number">//品番 3<input type="radio" name="product_category">//カテゴリ 4

という項目がありまして、search.phpに

php

1if($_GET['s']){$s = $_GET['s'];}//フリーワード 2if($_GET['product_number']){$product_number = $_GET['product_number'];} 3if($_GET['product_category']){$product_category = $_GET['product_category'];} 4 5query_posts( 6 array( 7 's'=>$s, 8 'meta_query'=> array( 9 array( 10 'key'=>'product_number', 11 'value'=>$product_number, 12 'compare' => '=',//値と一致する 13 ), 14 array( 15 'key'=>'category', 16 'value'=>$product_category, 17 'compare' => 'LIKE', 18 ), 19 'relation' => 'AND' 20 ) 21 )

という形でsearchform.phpから全部の項目が送信された場合は動くのですが、どれかひとつでも値がない(ラジオボタンのチェックがない)場合に検索結果が0件になってしまいます。
値が送信されたもののみでAND検索を行うことは可能でしょうか?

よろしくお願いいたします。

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

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

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

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

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

kei344

2017/07/28 02:57

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
tagu5959

2017/07/28 03:06

大変失礼致しました。変更致しました。
guest

回答1

0

ベストアンサー

こんな感じでどうでしょう。

PHP

1$meta_query = array(); 2$s = (string) filter_input( INPUT_POST, 's' ); 3$product_number = (string) filter_input( INPUT_POST, 'product_number' ); 4$product_category = (string) filter_input( INPUT_POST, 'product_category' ); 5if ( !empty( $product_number ) ) { 6 $meta_query[] = array( 7 'key'=>'product_number', 8 'value'=>$product_number, 9 'compare' => '=',//値と一致する 10 ); 11} 12if ( !empty( $product_number ) ) { 13 $meta_query[] = array( 14 'key'=>'category', 15 'value'=>$product_category, 16 'compare' => 'LIKE', 17 ); 18} 19if ( count( $meta_query ) > 1 ) { 20 meta_query[ 'relation' ] = 'AND'; 21} 22 23query_posts( array( 24 's'=>$s, 25 'meta_query'=> $meta_query 26) ); // 未テスト

【$_GET, $_POST じゃなくて filter_input 使えとのこと - Qiita】
http://qiita.com/mgng/items/901cf7f50a224b19335b


query_postsではなく、pre_get_postsフックを使ったほうが良いですよ。

【pre_get_postsでメインクエリを制御する | Tips Note by TAM】
https://www.tam-tam.co.jp/tipsnote/cms/post9420.html

【【wordpress】pre_get_postsを使ってみませんか? - Qiita】
http://qiita.com/ruka/items/e14280d34eddf49efad1

【[Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works】
https://emiac-works.com/coding/pre-get-posts-code-snipet/

投稿2017/07/28 17:17

kei344

総合スコア69398

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

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

tagu5959

2017/07/31 02:25

補足説明もたくさんいただきありがとうございます! 無事解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問