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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

655閲覧

カスタムフィールドのチェックボックスを絞りこみ検索の対象にしたいです

mamiMatsuumi

総合スコア12

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/12 03:39

編集2019/06/17 02:29

前提・実現したいこと

お世話になります。

チェックボックスの絞り込み検索を作りたいです。
下記のサイトを参考に作りましたが、
該当なしとしか表示されず困っております。
キーワード検索は動作しています。

カスタムフィールドの設定は「Custom Field Template」というプラグインを使用してます。

参考サイト
https://kotori-blog.com/wordpress/refinement_search/


search.php

<?php $s = $_GET['s']; $kodawari = $_GET['kodawari']; //meta_query用 if($kodawari){ foreach($kodawari as $val){ $metaquerysp[] = array( 'key'=>'kodawari', 'value'=> $val, ); } } $metaquerysp['relation'] = 'AND'; ?> <div>検索条件</div> <?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?> <?php if (is_array($kodawari)) { ?>カスタムフィールド:<?php if (is_array($kodawari)) { foreach($kodawari as $val){ if ($val === end($kodawari)) { echo $val; }else{ echo $val.", "; } } } } ?> <div>検索結果</div> <?php query_posts( array( 'meta_query' => $metaquerysp, 's' => $s, ) ); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div><?php the_title(); ?></div> <div><?php the_content(); ?></div> <?php endwhile; else : ?> <div>該当なし</div> <?php endif; wp_reset_query(); ?>

sarch.php

<div id="arty_sarch"> <form method="get" id="searchform" action="<?php bloginfo('url'); ?>"> <label for="s" class="assistive-text">検索</label> <input type="text" name="s" id="s" placeholder="検索" /> <div>カスタムフィールド</div> <label><input type="checkbox" name="kodawari[]" value="洋画">洋画</label><br> <label><input type="checkbox" name="kodawari[]" value="日本画">日本画</label><br> <label><input type="checkbox" name="kodawari[]" value="水彩画">水彩画</label><br> <label><input type="checkbox" name="kodawari[]" value="抽象画">抽象画</label><br> <label><input type="checkbox" name="kodawari[]" value="彫刻・立体物">彫刻・立体物</label> <input type="submit" value="検索" /> </form> </div>

試したこと

過去に似たような質問がありその解答を試してみましたが、うまくいきませんでいた
https://teratail.com/questions/74659
https://teratail.com/questions/73215

よろしくお願い致します

追記
プラグインAdvanced Custom Fieldを導入してあります。
カスタムフィールドの設定は
フィールドラベル:kodawari、フィールド名:kodawari、フィールドタイプ:チェックボックス、説明:無記入、必須か?:はい、選択肢:洋画・日本画・水彩画・抽象画・彫刻立体物、Allow Custom:いいえ、デフォルト値:無記入、レイアウト:垂直、Toggle:いいえ、返り値:Value、条件判定:いいえ、ラッパーの属性:無記入
となっています

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

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

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

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

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

guest

回答2

0

Advanced Custom Field でフィールドタイプがチェックボックスの場合、カスタムフィールドの値はデータベースに配列として保存されますので、'compare' => 'LIKE' を追加してください。

php

1<?php 2 3//meta_query用 4if($kodawari){ 5 foreach($kodawari as $val){ 6 $metaquerysp[] = array( 7 'key'=>'kodawari', 8 'value'=> $val, 9 'compare' => 'LIKE', 10 ); 11 } 12}

修正前の回答

ソースコード自体には常に該当なしと表示されてしまう原因となるような箇所が見当たりませんので、カスタムフィールドの設定ができていない可能性があります。Advanced Custom Field などの別のプラグインでカスタムフィールドを設定されてみてはいかがでしょうか?

また、検索結果が表示されない問題とは関係ありませんが、

php

1<?php 2// $kodawari = $_GET['kodawari']; // こうではなく 3$kodawari = isset( $_GET['kodawari'] ) ? $_GET['kodawari'] : []; // こう

の方が良いです。

投稿2019/06/12 17:02

編集2019/06/14 07:38
YukiYamashina

総合スコア1011

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

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

mamiMatsuumi

2019/06/14 03:41

オススメ頂いたAdvanced Custom Field を新たにインストールしてチェックボックスのカスタムフィールドを設定したのですが、やはり検索結果は該当なしと出てしまします。 フィールド名・フィールドラベル・フィールドタイプ・選択肢の項目は入力してあります 他に足りない設定があるのでしょうか?
YukiYamashina

2019/06/14 03:47

個々の投稿にカスタムフィールドの値(洋画とか日本画とか)は設定されましたか?
mamiMatsuumi

2019/06/14 05:15

はい、投稿にはカスタムフィールドの値を設定して更新してあります
YukiYamashina

2019/06/14 05:22

カスタムフィールドのフィールド名は kodawari でしょうか?
mamiMatsuumi

2019/06/14 05:50

kodawariに設定してあります
YukiYamashina

2019/06/14 06:22

すみません、カスタムフィールドをチェックボックスにしているというのを失念していました。Advanced Custom Field で設定されたフィールド名、フィールドラベル、フィールドタイプ、選択肢の項目を質問に追記しておいていただけますでしょうか?後ほど回答に適切なコードを追記します。
mamiMatsuumi

2019/06/14 07:08

フィールドラベル:kodawari、フィールド名:kodawari、フィールドタイプ:チェックボックス、説明:無記入、必須か?:はい、選択肢:洋画・日本画・水彩画・抽象画・彫刻立体物、Allow Custom:いいえ、デフォルト値:無記入、レイアウト:垂直、Toggle:いいえ、返り値:Value、条件判定:いいえ、ラッパーの属性:無記入 となっています よろしくお願い致します。
guest

0

こんな感じですかね

PHP

1<?PHP 2$s = filter_input(INPUT_GET,'s'); 3$kodawari = filter_input(INPUT_GET,'kodawari',FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 4$list["kodawari"]=["洋画","日本画","水彩画","抽象画","彫刻・立体物"]; 5$kodawari=is_array($kodawari)?array_filter($kodawari,function($x){return $x!=="";}):[]; 6$checked["kodawari"]=[]; 7array_walk($list["kodawari"],function($x) use($kodawari,&$checked){ 8 $checked["kodawari"][$x]=in_array($x,$kodawari)!==false?" checked":""; 9}); 10 11if($kodawari){ 12 $metaquerysp=array_map(function($x){ 13 return [ 14 'key'=>'kodawari', 15 'value'=> $x, 16 ]; 17 },$kodawari); 18 $metaquerysp['relation'] = 'AND'; 19 print_r($metaquerysp); 20 print "<hr>"; 21} 22 23if($s) print "検索キーワード:".htmlspecialchars($s)."<br>\n"; 24?> 25<form method="get"> 26<input type="text" name="s" placeholder="キーワード" value="<?=htmlspecialchars($s);?>"><br> 27<label><input type="checkbox" name="kodawari[]" value="洋画"<?=$checked["kodawari"]["洋画"];?>>洋画</label><br> 28<label><input type="checkbox" name="kodawari[]" value="日本画"<?=$checked["kodawari"]["日本画"];?>>日本画</label><br> 29<label><input type="checkbox" name="kodawari[]" value="水彩画"<?=$checked["kodawari"]["水彩画"];?>>水彩画</label><br> 30<label><input type="checkbox" name="kodawari[]" value="抽象画"<?=$checked["kodawari"]["抽象画"];?>>抽象画</label><br> 31<label><input type="checkbox" name="kodawari[]" value="彫刻・立体物"<?=$checked["kodawari"]["彫刻・立体物"];?>>彫刻・立体物</label> 32<input type="submit" value="send"><br> 33</form>

投稿2019/06/12 04:33

編集2019/06/12 07:06
yambejp

総合スコア114843

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

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

mamiMatsuumi

2019/06/12 07:04

早速お答えいただいた方法を試してみたのですが、やはり検索結果が該当なしになってしまします。 カスタムフィールドの設定が間違っているのでしょうか?
yambejp

2019/06/12 07:08

「検索結果が該当なし」なのと設定のための配列がつくれていないのは 別次元の話です。 ご指示いただいた通りの配列になっていると思うので、あとは 質問者さんがマニュアルを誤読しているのかもしれません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問