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

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

ただいまの
回答率

88.04%

WordPressでカスタムフィールドをチェックボックスで検索結果に含めたい。

解決済

回答 1

投稿 編集

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

score 22

<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>" >

<!--フリーワード検索窓ここから-->
<label for="s" class="assistive-text">検索</label>
<input type="text" class="field" name="s" id="s" placeholder="検索" />
<!--フリーワード検索窓ここまで-->


<!--チェックボックスでカテゴリを絞るここから-->
<div>カテゴリ</div>
<?php
$category_args = array(
    "orderby" => "name",//50音順
    "order" => "ASC",//ASC昇順・DESC降順
);
$categories = get_terms("category", $category_args);
foreach($categories as $category) :
?>
<label><input type="checkbox" name="get_cats[]" value="<?php echo $category->slug; ?>"><?php echo $category->name; ?></label>
<?php endforeach; ?>
<!--チェックボックスでカテゴリを絞るここまで-->


<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><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><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><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><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><br>


<input type="submit" class="searchsubmit" value="検索" />
</form>
<?php get_header(); ?>


<?php
$s = $_GET['s'];//フリーワード検索
$get_cats = $_GET['get_cats'];//カテゴリー検索
$low = $_GET['low'];//時給検索
$high = $_GET['high'];//時給検索
$kodawari = $_GET['kodawari'];//勤務地検索


//カテゴリー検索関連ここから
if($get_cats) {
    $tax_ary[] = array(
        'taxonomy'=>'category',
        'field'=>'slug',
        'terms'=> $get_cats,
        //'include_children'=>false,
        'operator'=>'IN'
            );
}
//カテゴリー検索関連ここまで

$tax_ary['relation'] = 'AND';

//勤務地検索関連ここから
if($kodawari) {
    foreach($kodawari as $val){
        $metaquerysp[] = array(
                'key'=>'kodawari',
                'value'=> $val,
                );
    }
}
//勤務地検索関連ここまで

$metaquerysp['relation'] = 'AND';
?>


<!--カテゴリーの検索結果ここから-->
<?php
if(is_array($get_cats)) {
    echo "<p>カテゴリー:";
    foreach ($get_cats as $val) {
        $p_term = get_term_by("slug", $val, "category");
        echo $p_term->name;
        if ($val !== end($get_cats)) {
            echo ", ";
    }
    }
    echo "</p>";
} ?>
<!--カテゴリーの検索結果ここまで-->

<!--フリーワードの検索結果ここから-->
<?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.", ";
}
}
}
}
 ?>
<!--勤務地の検索結果ここまで-->


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


<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<div><?php the_title(); ?></div>
<div><?php the_content(); ?></div>
            <?php endwhile; else : ?>

該当なし

            <?php endif;wp_reset_query(); ?>

●ワードプレスのカスタムフィールドを含めた検索がしたい。(チェックボックスを使って複数選択も可能にする)

●フリーワード欄に「名古屋市西区」と入れると検索できるので、カスタムフィールドの値は検索対象には入っている。

●だが、チェックボックスで「名古屋市西区」などと選択すると”該当なし”になる。

なぜ、チェックボックスでの選択だと、検索結果(投稿記事)がヒットしないのでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

'compare'=>'LIKE'
が必要なのではないでしょうか?

//勤務地検索関連ここから
if($kodawari) {
    foreach($kodawari as $val){
        $metaquerysp[] = array(
                'key'=>'kodawari',
                'value'=> $val,
                'compare'=>'LIKE' // 追加
                );
    }
}
//勤務地検索関連ここまで

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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