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

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

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

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

Q&A

解決済

1回答

3784閲覧

wordpressの固定ページにカスタムフィールド(チェックボックス)を追加して、その値で絞り込み検索したい。

X-men

総合スコア12

WordPress

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

0グッド

0クリップ

投稿2018/12/11 09:44

編集2018/12/12 05:44

wordpressの固定ページにカスタムフィールドのチェックボックスで項目を複数選択できるようにし、検索フォームからもチェックを付けた項目で絞り込み検索したいと思っていますが、項目にチェックして検索しても該当の固定ページが検索結果に表示されません。

検索フォームを以下のようにして、

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>"> <label for="s" class="assistive-text">検索</label> <input type="hidden" name="s" id="s" placeholder="検索" /> <div>カテゴリ</div> <label><input type="checkbox" name="content_category[]" value="項目A">項目A</label> <label><input type="checkbox" name="content_category[]" value="項目B">項目B</label> <label><input type="checkbox" name="content_category[]" value="項目C">項目C</label> <input type="submit" value="上記の条件で検索" /> </form>

検索結果ページを以下のようにしています。

<?php $s = $_GET['s']; $content_category = $_GET['content_category']; //meta_query用 if($content_category){ foreach($content_category as $val){ $metaquerysp[] = array( 'key'=>'content_category', 'value'=> $val, ); } } $metaquerysp['relation'] = 'AND'; ?> <div>検索条件</div> <?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?> <?php if (is_array($content_category)) { ?>カスタムフィールド:<?php if (is_array($content_category)) { foreach($content_category as $val){ if ($val === end($content_category)) { 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(); ?>

検索結果は、例えば「項目A」にチェックを入れて検索しても以下のように表示されてしまいます。
※wordpress側の固定ページでは「項目A」にチェックは付いています。

検索条件 カスタムフィールド:項目A 検索結果 該当なし

http://kotori-blog.com/wordpress/refinement_search/
こちらのサイトを参考にしており、サンプルサイトである下記のようにしたいと思っています。
http://kotori-blog.com/test/
ユーザー名 admin
パスワード kotori
※こだわり(カスタムフィールドのチェックボックス)駐車場あり, バス・トイレ別, 2階以上住戸 の箇所

●その他参考サイト
http://turezurenaru.blog.jp/archives/31060521.html
https://hirashimatakumi.com/blog/3109.html
https://wiredpunch.com/wordpress%E3%81%A7%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E5%9E%8B%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%82%92or%E6%A4%9C/

https://teratail.com/questions/68544
こちらのページでも同じようなことを解決された方がいらっしゃいますが、具体的な解決方法がわからず困っております。
どなたかご教授いただければ幸いです。

どうぞよろしくお願いいたします。

イメージ説明

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

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

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

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

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

CHERRY

2018/12/12 01:36

「表示されません」だけでは、どのような状況なのか判断ができません。どのような結果になっているのかを具体的に記載していただくことはできないでしょうか? 文章だけで難しい場合は画像添付もできるので画像等を使って説明を入れてください。
CHERRY

2018/12/12 03:42

検索結果があるのに 0 件ということは、検索条件が間違っているということです。 非推奨の `query_posts` を使っているのはちょっとおいておいて、 $metaquerysp には「正しい検索条件」が入っていますか?
X-men

2018/12/12 05:03

>$metaquerysp には「正しい検索条件」が入っていますか? すみません、上記については知識不足のため、まったく理解できておりません。 どのようにしたらよいでしょうか。。
CHERRY

2018/12/12 05:09

たとえば、 ` <div>検索結果</div> ` の次の行に ` var_dump( $metaquerysp ); ` と記載すると 画面に $metaquerysp の中身が表示されますが、表示された内容は、検索したい内容で正しいですか?
CHERRY

2018/12/12 05:16

そういえば、カスタムフィールドは、どのように定義されていますか?
X-men

2018/12/12 05:42

>` var_dump( $metaquerysp ); ` と記載すると 上記を記載してみたところ以下のように表示されました。 検索条件 カスタムフィールド:項目A 検索結果 array(2) { [0]=> array(2) { ["key"]=> string(16) "content_category" ["value"]=> string(30) "項目A" } ["relation"]=> string(3) "AND" } 該当なし
X-men

2018/12/12 05:44

>そういえば、カスタムフィールドは、どのように定義されていますか? こちらにつきましてはキャプチャを追加いたしました。
guest

回答1

0

ベストアンサー

なるほど、Advanced Custom Fields (ACF) をお使いですか。

選択肢の部分で、「koumokuA : 項目A」と定義されているので、WP_Query や query_posts 等のカスタムフィールド検索に使われる値(value)は、「koumokuA」の部分になります。

対応方法としては、

まず、フォームの部分で、

<label><input type="checkbox" name="content_category[]" value="項目A">項目A</label>

の value を

<label><input type="checkbox" name="content_category[]" value="koumokuA">項目A</label>

のように 値とラベルを使うようにする。

検索の方も修正が必要で、

$metaquerysp[] = array( 'key'=>'content_category', 'value'=> $val, );

}

は、compare を省略しているので、 = で、比較しますが、 ACF のチェックボックスは、 = で比較できません。

$metaquerysp[] = array( 'key'=>'content_category', 'value'=> $val, 'compare' => 'LIKE', );

のように compare に LIKE を指定する必要があります。

参考URL


(追記)

非推奨の query_posts をやめて、WP_Query で、下記のように書き換えたほうがようでしょう。(変更部分のみ記載)

//meta_query用 $metaquerysp = array(); if($content_category){ foreach($content_category as $val){ $metaquerysp[] = array( 'key'=>'content_category', 'value'=> $val, ); } $metaquerysp['relation'] = 'OR'; // relation は、$content_category があるときだけ } ?>
<div>検索結果</div> <?php $args = array( 's' => $s, ); if( !empty($metaquerysp) ){ // $metaquerysp が、空じゃない時に meta_query 条件を追加。 $args['meta_query'] = $metaquerysp; } // query_posts を WP_Query に変更 $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <div><?php the_title(); ?></div> <div><?php the_content(); ?></div> <?php endwhile; wp_reset_postdata(); else: ?> <div>該当なし</div> <?php endif; ?>

参考:

投稿2018/12/12 06:20

編集2018/12/14 01:30
CHERRY

総合スコア25171

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

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

CHERRY

2018/12/12 06:29

query_posts は、やめたほうがいいけど、今は時間がないので後ほど...
X-men

2018/12/12 07:36

詳しい回答をいただきましてありがとうございます! お教えいただいた方法で検索結果に表示されました! ただ、AND検索?ができていないようで、困っております。 ・項目Aにチェックが入っているページ1 ・項目A、項目Bにチェックが入っているページ2 ・項目A、項目B、項目Cにチェックが入っているページ3 となっている場合に、BとCにチェックをして検索するとページ3のみが表示されます。 希望としてはページ2も結果に表示したいと思っています。 ※Aにチェックして検索した場合はページ1、2、3の全てが表示されます。 また、なにもチェックせずに検索した場合は全てを表示したい(絞り込まない)のですが、こちらは可能なのでしょうか。。
CHERRY

2018/12/14 01:01 編集

(1点目) > ・項目Aにチェックが入っているページ1 > ・項目A、項目Bにチェックが入っているページ2 > ・項目A、項目B、項目Cにチェックが入っているページ3 > となっている場合に、BとCにチェックをして検索するとページ3のみが表示されます。 これは、チェックボックスが、 AND 検索されているからですね。 「B AND C」は、 B と C 両方にチェック入っているという条件です。 > 希望としてはページ2も結果に表示したいと思っています。 B と C にチェック入れた場合、 B か C のどちらかに一致する内容を表示するのであれば、 OR 検索なので、チェックボックス( meta_query )で、OR 検索するの場合は、` $metaquerysp['relation'] ` = 'AND'; の部分は、 'AND' ではなく ` $metaquerysp['relation'] = 'OR'; ` にする必要があります。
CHERRY

2018/12/14 01:28 編集

> また、なにもチェックせずに検索した場合は全てを表示したい(絞り込まない)のですが、こちらは可能なのでしょうか。。 検索条件に 'meta_query' を入れない場合は、カスタムフィールドは検索されないので、キーワードだけでの検索になります。 回答欄に query_posts を WP_Query に書き換えたバージョンで、記載しておきます。
X-men

2018/12/14 06:35

詳しく教えていただきありがとうございます! チェックをつけた状態での検索は思い通りの結果になりました! > また、なにもチェックせずに検索した場合は全てを表示したい(絞り込まない)のですが、こちらは可能なのでしょうか。。 こちらの検索結果につきましても動きは正常かと思うのですが、固定ページも投稿も全てが表示されております。(件数や順番は指定していないが、新しい順に10件表示されています) 結果として表示したいのは特定の親の子ページ(固定ページ)なのですが、親IDを指定して表示させることはできますでしょうか。 https://wemo.tech/160 https://bl6.jp/web/wordpress/load-specify-parent-page/ http://satohmsys.info/post-895/ 上記などを参考にやってみたのですが、希望通りにならず困っております。。
CHERRY

2018/12/14 06:53 編集

たしかに post_type の指定もしていないので、全てが検索対象になりますね。 条件省略時のデフォルトが決まっている条件もありますので、表示件数は、設定画面で設定した件数(10件)、ソート順は、「新しい順」となります。 できれば、文章だけではなく、具体的に試したコードの内容と結果を書いていただけると確認しやすいのですが...
X-men

2018/12/14 07:15

何度もすみません。。 以下のように変更してみたところ、投稿ページのみが新しい順で10件表示されるようになりました。 <div>検索結果</div> <?php $args = array( 'meta_query' => array( array( 'post_parent' => 1126, 's' => $s, ) ) );
CHERRY

2018/12/14 07:29

meta_query は、カスタムフィールドの検索なので、post_parent や s は、meta_query には含めないです。 固定ページ ID 1126 の子ページを検索するなら、こんな感じでしょうか? ``` $args = array( 's' => $s, 'post_type' => 'page', // 固定ページ のみ 'post_parent' => 1126, // 親 ID ); ``` 古い順に表示なら ``` 'order' => 'ASC', ``` も追加してください。
X-men

2018/12/14 11:20

ありがとうございます! 思い通りの結果になりました! あとは表示件数を増やしてみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問