fj7839
@fj7839 (Junki Furukawa)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Wordpressのカスタムフィールド内の投稿オブジェクトから、セレクトボックスで絞り込み検索したい。

解決したいこと

Wordpressのカスタムフィールド内の投稿オブジェクトから、セレクトボックスで絞り込み検索したいです。

  • 【 カスタム投稿タイプ 】コンサート:concertsに、ACFでデータを持たせている。
  • 【 カスタムフィールド1 】チケットステータス:status(セレクトボックス、単数)
  • 【 カスタムフィールド2 】演奏者:performer(投稿オブジェクト、複数)
  • 【 カスタムフィールド3 】楽器:search_instrument(チェックボックス、複数)
  • これらを検索フォームにて、絞り込みしたい。

発生している問題・エラー

楽器と演奏者の絞り込みができない。検索をかけるとヒット件数が0件になってしまう。

  • statusは問題なく絞り込みできた。
  • 【 performerの返り値 】連想配列(セレクトボックスに入れたいのは、titleのslug)
  • 【 search_instrumentの返り値 】flute、violin、piano

該当するソースコード

【 search.php 】

$s = $_GET['s'];

// ステータスのクエリを追加
if(isset($_GET['status'])){
$metaquerysp[] = array(
    'key'=>'status',
    'value'=>$_GET['status'],
  );
}else{
  $metaquerysp[] = '';
}

// 演奏家のクエリを追加
if(isset($_GET['performer'])){
$metaquerysp[] = array(
    'key'=>'performer',
    'value'=>$_GET['performer'],
    'campare' => 'LIKE'
  );
}else{
  $metaquerysp[] = '';
}

// 演奏楽器のクエリを追加
if(isset($_GET['search_instrument'])){
$metaquerysp[] = array(
    'key'=>'search_instrument',
    'value'=>$_GET['search_instrument'],
    'campare' => 'LIKE'
  );
}else{
  $metaquerysp[] = '';
}

// 2件以上でrelationを追加
if( 1<count($metaquerysp) ) {
  $metaquerysp['relation'] = 'OR';
}

$search_args = array(
  'post_type' => 'concerts',
  ...
  's' => $s,
  'meta_query' => array(
    $metaquerysp,
  )
);
$the_query = new WP_Query( $search_args );

【 my_saerchform.php 】

<form method="get" action="<?php bloginfo( 'url' ); ?>" class="my_searchform">

  <label for="s"><i class="bi bi-circle-fill"></i>キーワード検索</label>
  <input name="s" id="s" type="text" placeholder="キーワードを入力"/>
  <input type="hidden" name="s">

  <label for="status"><i class="bi bi-circle-fill"></i>ステータス</label>
  <select name="status" id="status" class="input">
    <option value="" selected='selected'>全てのコンサート</option>
    <option value="sale">チケット販売中</option>
    <option value="prepare">販売準備中</option>
    <option value="finish">終了しました</option>
  </select>

  <label for="performer"><i class="bi bi-circle-fill"></i>演奏者</label>
  <select name='performer' id='performer' class="input">
    <option value="" selected="selected">全ての演奏者</option>
    <option value="takashi_tanaka">田中たかし</option>
    ...
</select>

  <label for="search_instrument"><i class="bi bi-circle-fill"></i>演奏楽器</label>
  <select name='search_instrument' id='search_instrument' class="input">
    <option value="" selected="selected">全ての楽器</option>
    <option value="violin">ヴァイオリン</option>
    <option value="viola">ヴィオラ</option>
    <option value="cello">チェロ</option>
    <option value="bass">コントラバス</option>
    ...
  </select>

  <input id="submit" type="submit" value="検索" />
</form>

何か抜けている部分や、不足している知識があれば
解決の助言をいただけますと幸いですm(_ _)m

0

No Answers yet.

Your answer might help someone💌