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

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

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

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

1回答

845閲覧

WordPressでプルダウン形式の検索フォームを作成したい。

Kohei1122

総合スコア6

WordPress

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2018/05/07 00:00

編集2018/05/07 07:09

WordPressでプルダウン形式の検索フォームを作成したいと考えております。

http://kotori-blog.com/wordpress/refinement_search/

上記のサイトを参考にしているのですが、
カテゴリで絞り込むチェックボックス以外のパーツ(プルダウン等)の部分で躓いております。

検索結果ではカテゴリが指定されているのに検索結果に反映されていない状況です。

スクリーンショットを添付しますのでご確認していただければと思います。

イメージ説明

検索フォーム

'<form method="get" id="searchform" action="<?php echo home_url('/'); ?>">
<input type="text" placeholder="<?php echo get_theme_text_search_placeholder();//検索ボックスのプレースホルダテキストを取得 ?>" name="s" id="s">
<input type="submit" id="searchsubmit" value="">

<select name="catnum" style="margin-top:20px;"> <option value="" selected>カテゴリ</option> <?php $categories = get_categories('parent=0'); foreach($categories as $category) : ?> <option value="<?php echo $category->term_id; ?>"><?php echo $category->cat_name; ?></option> <?php endforeach; ?> </select> <select name="type" style="margin-top:20px;"> <option value="" selected>クーポン使用(カスタムフィールドのセレクトボックス)</option> <option value="可能">可能</option> <option value="不可">不可</option> </select> <div style="margin-top:20px">値段(カスタムフィールドのテキストフィールド)</div> <select name="low" style="margin-top:5x;"> <option value="0" selected>下限なし</option> <option value="500">500円以上</option> <option value="1000">1,000円以上</option> <option value="1500">1,500円以上</option> </select> ~ <select name="high" style="margin-top:5px;"> <option value="500">500円以下</option> <option value="1000">1,000円以下</option> <option value="1500">1,500円以下</option> <option value="9999999" selected>上限なし</option> </select> <div style="margin-top:20px">使用した果物(タグ)</div> <?php $taxonomy_name = 'post_tag'; $taxonomys = get_terms($taxonomy_name); if(!is_wp_error($taxonomys) && count($taxonomys)): foreach($taxonomys as $taxonomy): $tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); if($tax_posts): ?> <label><input type="checkbox" name="post_tag[]" value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></label><br> <?php endif; endforeach; endif; ?> <div>送料</div> <label><input type="checkbox" name="kodawari[]" value="無料">無料</label><br> <label><input type="checkbox" name="kodawari[]" value="有料">有料</label><br> <input type="submit" class="submit" name="submit" id="searchsubmit" value="検索" /> </form>'

ーーーーーーーーー
ここから検索結果

'<?php //検索結果?>

<?php get_header(); ?> <?php $s = $_GET['s']; $catnum = $_GET['catnum']; $placenum = $_GET['placenum']; $type = $_GET['type']; $low = $_GET['low']; $high = $_GET['high']; $post_tag = $_GET['post_tag']; $kodawari = $_GET['kodawari']; if($catnum){ $taxquerysp[] = array( 'taxonomy'=>'category', 'terms'=> $catnum, 'include_children'=>false, 'field'=>'term_id', 'operator'=>'AND' ); } if($post_tag){ $taxquerysp[] = array( 'taxonomy'=>'post_tag', 'terms'=> $post_tag, 'include_children'=>false, 'field'=>'slug', 'operator'=>'AND' ); } if($placenum){ $taxquerysp[] = array( 'taxonomy'=>'place', 'terms'=> $placenum, 'include_children'=>false, 'field'=>'slug', 'operator'=>'AND' ); } $taxquerysp['relation'] = 'AND'; if($kodawari){ foreach($kodawari as $val){ $metaquerysp[] = array( 'key'=>'kodawari', 'value'=> $val, ); } } if($type){ $metaquerysp[] = array( 'key'=>'type', 'value'=> $type, 'compare'=>'=', ); } $metaquerysp[] = array( 'key'=>'price', 'value'=>array( $low, $high ), 'compare'=>'BETWEEN', 'type'=>'NUMERIC', ); $metaquerysp['relation'] = 'AND'; ?> <?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?> <?php if($catnum){ ?>カテゴリ:<?php echo get_cat_name($catnum); ?><br><?php } ?> <?php if($placenum){ ?>間取りタイプ:<?php echo get_term_by('slug',$placenum,"place")->name; ?><br><?php } ?> <?php if($type){ ?>ルームタイプ:<?php echo $type; ?><br><?php } ?> <?php if($low == 0 && $high == 9999999){}else{ ?>家賃:<?php if($low == 0){ ?>下限なし<?php }else{ echo number_format($low).'円'; } ?> ~ <?php if($high == 9999999){ ?>上限なし<?php }else{ echo number_format($high).'円';} ?><br>

<br><?php } ?>

<?php if (is_array($cutnum)) { ?>カテゴリ:<?php

foreach($cutnum as $val){
if ($val === end($cutnum)) {
echo get_cat_name($catnum);
}else{
echo get_cat_name($catnum).", ";
}
}
}
?>

<?php if (is_array($post_tag)) { ?>こだわり(タグ):<?php

foreach($post_tag as $val){
if ($val === end($post_tag)) {
echo get_term_by('slug',$val,"post_tag")->name;
}else{
echo get_term_by('slug',$val,"post_tag")->name.", ";
}
}
?><br><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.", ";
}
}
}
}
?>

<?php query_posts( array( 'tax_query' => $taxquerysp, '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 : ?>

該当なし

<?php endif;wp_reset_query(); ?>
<?php get_template_part('list') ?> <?php get_footer(); ?>'

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

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

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

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

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

m.ts10806

2018/05/07 00:35

どのような設定・コードを書かれたのでしょうか?添付の画像だけでは背景部分が見えてきませんので、「やったこと」を具体的に記載してください。
rmrmnrm

2018/05/07 06:26

参考サイトやスクリーンショットでは実際のコードがわかりませんので、検索部分と検索結果のコードを記載してください。
Kohei1122

2018/05/07 06:58

<form method="get" id="searchform" action="<?php echo home_url('/'); ?>"> <input type="text" placeholder="<?php echo get_theme_text_search_placeholder();//検索ボックスのプレースホルダテキストを取得 ?>" name="s" id="s"> <input type="submit" id="searchsubmit" value=""> <select name="catnum" style="margin-top:20px;"> <option value="" selected>カテゴリ</option> <?php $categories = get_categories('parent=0'); foreach($categories as $category) : ?> <option value="<?php echo $category->term_id; ?>"><?php echo $category->cat_name; ?></option> <?php endforeach; ?> </select> <select name="type" style="margin-top:20px;"> <option value="" selected>クーポン使用(カスタムフィールドのセレクトボックス)</option> <option value="アパート">可能</option> <option value="マンション">不可</option> </select> <div style="margin-top:20px">値段(カスタムフィールドのテキストフィールド)</div> <select name="low" style="margin-top:5x;"> <option value="0" selected>下限なし</option> <option value="500">500円以上</option> <option value="1000">1,000円以上</option> <option value="1500">1,500円以上</option> </select> ~ <select name="high" style="margin-top:5px;"> <option value="500">500円以下</option> <option value="1000">1,000円以下</option> <option value="1500">1,500円以下</option> <option value="9999999" selected>上限なし</option> </select> <div style="margin-top:20px">使用した果物(タグ)</div> <?php $taxonomy_name = 'post_tag'; $taxonomys = get_terms($taxonomy_name); if(!is_wp_error($taxonomys) && count($taxonomys)): foreach($taxonomys as $taxonomy): $tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); if($tax_posts): ?> <label><input type="checkbox" name="post_tag[]" value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></label><br> <?php endif; endforeach; endif; ?> <div>送料</div> <label><input type="checkbox" name="kodawari[]" value="無料">無料</label><br> <label><input type="checkbox" name="kodawari[]" value="有料">有料</label><br> <input type="submit" class="submit" name="submit" id="searchsubmit" value="検索" /> </form>
Kohei1122

2018/05/07 07:00

<?php //検索結果?> <?php get_header(); ?> <?php $s = $_GET['s']; $catnum = $_GET['catnum']; $placenum = $_GET['placenum']; $type = $_GET['type']; $low = $_GET['low']; $high = $_GET['high']; $post_tag = $_GET['post_tag']; $kodawari = $_GET['kodawari']; if($catnum){ $taxquerysp[] = array( 'taxonomy'=>'category', 'terms'=> $catnum, 'include_children'=>false, 'field'=>'term_id', 'operator'=>'AND' ); } if($post_tag){ $taxquerysp[] = array( 'taxonomy'=>'post_tag', 'terms'=> $post_tag, 'include_children'=>false, 'field'=>'slug', 'operator'=>'AND' ); } if($placenum){ $taxquerysp[] = array( 'taxonomy'=>'place', 'terms'=> $placenum, 'include_children'=>false, 'field'=>'slug', 'operator'=>'AND' ); } $taxquerysp['relation'] = 'AND'; if($kodawari){ foreach($kodawari as $val){ $metaquerysp[] = array( 'key'=>'kodawari', 'value'=> $val, ); } } if($type){ $metaquerysp[] = array( 'key'=>'type', 'value'=> $type, 'compare'=>'=', ); } $metaquerysp[] = array( 'key'=>'price', 'value'=>array( $low, $high ), 'compare'=>'BETWEEN', 'type'=>'NUMERIC', ); $metaquerysp['relation'] = 'AND'; ?> <?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?> <?php if($catnum){ ?>カテゴリ:<?php echo get_cat_name($catnum); ?><br><?php } ?> <?php if($placenum){ ?>間取りタイプ:<?php echo get_term_by('slug',$placenum,"place")->name; ?><br><?php } ?> <?php if($type){ ?>ルームタイプ:<?php echo $type; ?><br><?php } ?> <?php if($low == 0 && $high == 9999999){}else{ ?>家賃:<?php if($low == 0){ ?>下限なし<?php }else{ echo number_format($low).'円'; } ?> ~ <?php if($high == 9999999){ ?>上限なし<?php }else{ echo number_format($high).'円';} ?><br> <br><?php } ?> <?php if (is_array($cutnum)) { ?>カテゴリ:<?php foreach($cutnum as $val){ if ($val === end($cutnum)) { echo get_cat_name($catnum); }else{ echo get_cat_name($catnum).", "; } } } ?> <?php if (is_array($post_tag)) { ?>こだわり(タグ):<?php foreach($post_tag as $val){ if ($val === end($post_tag)) { echo get_term_by('slug',$val,"post_tag")->name; }else{ echo get_term_by('slug',$val,"post_tag")->name.", "; } } ?><br><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.", "; } } } } ?> <?php query_posts( array( 'tax_query' => $taxquerysp, '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 : ?> 該当なし <?php endif;wp_reset_query(); ?> <?php get_template_part('list') ?> <?php get_footer(); ?>
Kohei1122

2018/05/07 07:01

上がフォームで下が結果画面です。見づらかったらご指摘お願いします。
rmrmnrm

2018/05/07 07:01

ここでなく質問本文に追記をお願いします。その際は```で囲っていただけると幸いです。
m.ts10806

2018/05/07 07:02

おそらく1つ目のコメントでお気づきかと思いますが、コメント欄では改行もできませんしコードブロック機能も使えません。質問は質問者さん自身が編集できるので、質問本文に追記してください。(その際コードはインデントを調整し、コードブロック```で囲ってください。分からなければコード部分を選択し<code>ボタンを押してください)
Kohei1122

2018/05/07 07:04

すみません、何から何までごしてきありがとうございます。すぐ修正します。
m.ts10806

2018/05/07 08:05 編集

コード部分ですが、再掲します。 -> コードはインデントを調整し、コードブロック```で囲ってください。分からなければコード部分を選択し<code>ボタンを押してください。正しく反映されているかどうかは質問編集画面のプレビューを見ながら編集していってください。
guest

回答1

0

「該当なし」のあとの記述は絞り込みと関係あるものですか?
ソースを見る限り

php

1<?php get_template_part('list') ?>

のように思えますが、絞り込みができていないことと一覧の表示は別なような気がします。
恐らくquery_postsの指定がうまくいってないのだと思います。
query_postsの前に各配列をダンプして正しく格納されているか確認してください。

また、記述の書き直ししていただけると他の方からも回答が得られやすいと思います。

投稿2018/05/08 08:12

rmrmnrm

総合スコア139

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問