質問編集履歴

1 ソースコードミスのため修正

lingwood

lingwood score 40

2017/03/09 18:19  投稿

WordPress チェックボックスだけでカスタムフィールドのデータを絞り込みしたい
お世話になります。
ご教授いただけますよう、何卒よろしくお願い申し上げます。
###実現したいこと
WordPressでサイトを構築しています。
高度なことをするものではありませんが、
チェックボックスによる『検索(絞り込み)機能』をつけて
欲しいと言われています。
例として社員一覧を作るみたいな感じで、
1. エリア(関東、関西、東海など)
2. タイプ(正社員、契約、バイト)
といったようにエリアとタイプをそれぞれ選び、
関東&正社員にチェック =関東の正社員を表示する
正社員にチェック   =正社員だけが表示される
関東&関西&東海&バイト=関東、関西、東海のバイトが表示される
という結果を返してくれるようにしたいと思っています。
現在のテンプレート構成として当該部分を構成するものは以下の通りになっています。
list.php      ← 一覧ページを形成:ここにチェックボックス検索を入れたい
search-lists.php ← チェックボックスで検索したら結果が表示される
※list.phpとsearch-lists.phpのデザインを同じにしたいため
こうしています。
single-lists.php ← 詳細ページが表示される
###現況・試したこと
現在の状態として、カスタムフィールドテンプレートでラジオボタンを作り
・エリア
・タイプ
のどれかひとつを選ぶ形になっています。
前項に対して、今までに試したことですが、主に以下のサイトさんの
記事を参考にしました。
http://kotori-blog.com/wordpress/refinement_search/
http://www.webopixel.net/wordpress/584.html
http://turezurenaru.blog.jp/archives/31060521.html
https://magnets.jp/web_design/cms-web_design/3124/
###該当のソースコード
上記サイトを参考にして以下のコードをそれぞれのテンプレートに
記載しました。
■list.php
```
<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/session">
<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/list/">
 <input type="hidden" name="s" id="s" placeholder="検索" />
   
<div>カスタムフィールド</div>
   <label><input type="checkbox" name="request[]" value="関東">関東</label><br>
   <label><input type="checkbox" name="request[]" value="東海">東海</label><br>
   <label><input type="checkbox" name="request[]" value="関西">関西</label><br>
   <label><input type="checkbox" name="request[]" value="正社員">正社員</label>
   <label><input type="checkbox" name="request[]" value="契約">契約</label>
   <label><input type="checkbox" name="request[]" value="バイト">バイト</label>
   <input type="submit" value="検索" />
</form>
```
■search-lists.php
```
<?php
$s = $_GET['s'];
$request = $_GET['request'];
//meta_query用
if($request){
   foreach($request as $val){
       $metaquerysp[] = array(
               'key'=>'request',
               'value'=> $val,
               );
   }
}
$metaquerysp['relation'] = 'AND';
?>
<div>検索条件</div>
<?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?>
<?php if (is_array($request)) { ?>カスタムフィールド:<?php
if (is_array($request)) {
foreach($request as $val){
if ($val === end($request)) {
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(); ?>
```
###発生している問題
結果を表示するsearch-lists.phpは読み込んでいるのですが、
検索結果が「該当なし」など思うように表示されません。
検索を押した際のURLですが、以下の通りになります。
http://URL/wp-demo/list?s=&request%5B%5D=関東&request%5B%5D=正社員
ここを手動でs=関東とすると結果的に関東のものが出力されますが、
s=正社員とすると正社員は表示されない状態です。
何が悪いのかさっぱりわからず途方にくれております。
悪い箇所のご指摘等いただけましたら幸いです。
またできましたら解決策も一緒にご教示頂けましたら
本当に助かります。
お手数ですが、何卒よろしくお願い申し上げます。
  • PHP

    36285 questions

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

  • WordPress

    14547 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る