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

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

ただいまの
回答率

90.33%

  • PHP

    21391questions

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

  • WordPress

    7692questions

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

WordPress チェックボックスだけでカスタムフィールドのデータを絞り込みしたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 2,358

lingwood

score 23

お世話になります。
ご教授いただけますよう、何卒よろしくお願い申し上げます。

実現したいこと

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'); ?>/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=正社員とすると正社員は表示されない状態です。

何が悪いのかさっぱりわからず途方にくれております。

悪い箇所のご指摘等いただけましたら幸いです。
またできましたら解決策も一緒にご教示頂けましたら
本当に助かります。

お手数ですが、何卒よろしくお願い申し上げます。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

list.php
カスタム投稿タイプの中を検索するようにフォームパラメーターを変更。

search-list.php
ifをlist.phpで設定したカスタムフィールドから受けるパラメータに
変更することで解決できました。
お騒がせいたしました。

またの際にはよろしくお願いします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    21391questions

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

  • WordPress

    7692questions

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