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

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

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

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

Q&A

解決済

1回答

4829閲覧

wordpressプラグインを使わずにカスタムフィールドで絞り込み検索

ohagin

総合スコア14

WordPress

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

0グッド

0クリップ

投稿2017/04/20 13:16

編集2017/04/20 14:03

###前提・実現したいこと
よろしくお願いいたします。
http://kotori-blog.com/wordpress/refinement_search/
上記ページの「カスタムフィールドで絞り込むチェックボックス」を参考に、絞り込み検索の設置を試みています。
絞り込み方法は投稿ページにカスタムフィールドを利用し、検索フォームでチェックボックスを利用しています。
検索フォームでチェックボックスを利用するのは、どれか一つでも条件が当てはまれば投稿を表示させたいからです。

チェックボックスに見出しを付けたいため、タグではなくカスタムフィールドを利用しています。

例:
関西
□大阪 □兵庫 □京都 □奈良 □滋賀 □和歌山
四国
□徳島 □香川 □高知 □愛媛

のような形です。

###発生している問題・エラーメッセージ

エラー1:カスタムフィールドでチェックボックスを使用した場合は、すべて「該当なし」と表示されます。 エラー2:カスタムフィールドでテキストを使用した場合は、カスタムフィールドのテキストボックスに一番初めに記入した文言と同じものに、検索フォームのチェックが入った場合のみ表示されます。

###該当のソースコード
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'] = 'OR'; ?> <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, ) ); ?> <?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(); ?>

検索画面

<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> <input type="submit" value="検索" /> </form>

###試したこと

<?php query_posts( array( 'meta_query' => $metaquerysp, 's' => $s, ) ); ?>

上記コードでは、テキストボックスでも検索できなかったので、「's' => $s,」を削除したところ最初に記載した一件目のみ表示が可能となりました。

上手く説明できているか分からないのですが
よろしくお願いします。

インストールプラグイン
・Search Everything
・カスタムフィールドテンプレート

miz様からアドバイスをいただき、var_dump()を使ったところ下記表示となりました。
array(2) { [0]=> array(2) { ["key"]=> string(8) "kodawari" ["value"]=> string(9) "和歌山" } ["relation"]=> string(2) "OR" } string(0) ""

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/04/20 13:46

まずは各変数に予期している値が予期している形で入っているか確認してください。確認のため出力する際には、var_dump()を使うとわかりやすいです。var_dump($metaquerysp); var_dump($s);の要領です。
ohagin

2017/04/20 14:00

アドバイスくださりありがとうございます。確認してみました。array(2) { [0]=> array(2) { ["key"]=> string(8) "kodawari" ["value"]=> string(9) "和歌山" } ["relation"]=> string(2) "OR" } string(0) ""と出ました。取れていると思うのですが、使える状態ではないのでしょうか?
guest

回答1

0

ベストアンサー

以下、回答ではなく、デバッグの手順になります。

(1)
まずは各変数に予期している値が予期している形で入っているか確認してください。
確認のため出力する際には、var_dump()を使うとわかりやすいです。

PHP

1var_dump($metaquerysp); var_dump($s);

(2)
var_dumpの結果、値は正常そうですが、以下の点がひっかかります。
meta_queryの解説には、

relation (文字列) - meta_query の中に2つ以上の配列を入れたときの論理的な関係。使える値は 'AND' と 'OR' です(デフォルト: 'AND')。ひとつだけ配列を入れるときは使わないでください。

とあるので、念のため、カスタムフィールドの値がひとつのときには、relationをセットしないようにしてみてください。

PHP

1if( 1<count($metaquerysp) ) { 2 $metaquerysp['relation'] = 'OR'; 3}

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query#.E3.82.AB.E3.82.B9.E3.82.BF.E3.83.A0.E3.83.95.E3.82.A3.E3.83.BC.E3.83.AB.E3.83.89.E3.81.AE.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF

投稿2017/04/20 14:29

編集2017/04/20 14:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ohagin

2017/04/20 14:55

ありがとうございました。 教えていただいたコードを入れたところ、希望の動き方をしました。 突然動き出したので理解ができていないのですが、教えて頂きましたコードをじっくりと調べてみます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問