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

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

ただいまの
回答率

90.37%

  • WordPress

    9408questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 302

X-men

score 6

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
こちらのページでも同じようなことを解決された方がいらっしゃいますが、具体的な解決方法がわからず困っております。
どなたかご教授いただければ幸いです。

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

イメージ説明

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2018/12/12 14:16

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

    キャンセル

  • X-men

    2018/12/12 14: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 14:44

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

    キャンセル

回答 1

checkベストアンサー

+2

なるほど、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/14 16:15

    何度もすみません。。
    以下のように変更してみたところ、投稿ページのみが新しい順で10件表示されるようになりました。

    <div>検索結果</div>

    <?php
    $args = array(
    'meta_query' => array(
    array(
    'post_parent' => 1126,
    's' => $s,
    )
    )
    );

    キャンセル

  • 2018/12/14 16:29

    meta_query は、カスタムフィールドの検索なので、post_parent や s は、meta_query には含めないです。

    固定ページ ID 1126 の子ページを検索するなら、こんな感じでしょうか?

    ```
    $args = array(
    's' => $s,
    'post_type' => 'page', // 固定ページ のみ
    'post_parent' => 1126, // 親 ID
    );
    ```

    古い順に表示なら
    ```
    'order' => 'ASC',
    ```
    も追加してください。

    キャンセル

  • 2018/12/14 20:20

    ありがとうございます!
    思い通りの結果になりました!

    あとは表示件数を増やしてみたいと思います!

    キャンセル

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

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

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

  • WordPress

    9408questions

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

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