WordPress:固定ページにキーワードとカスタムタクソノミーの検索結果を表示する方法

 

functions.phpに記述するpre_get_postsでは固定ページに検索結果を出力できません。

理由は下記のcodexページで確認できます。

 

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts

注意: pre_get_posts アクションは固定ページのリクエストでは動作しません。

 

そこで、get_postsを利用して固定ページに検索結果を出力していきます。

その参考コードは以下になります。

 

page-xxx.php

<ul>
  <?php 
  
  $serch_str = $_GET['key'];
  $faq_tax = $_GET['cat'];

  $data_array = array(
      'post_type' => 'voice',
      'posts_per_page' => -1,
      's' => $serch_str,

    );

  if (!empty($faq_tax)){
    $taxquery = $data_array;
    $taxquery['tax_query'] = array(
      array(
      'taxonomy' => 'faq_taxonomy',
      'field' => 'slug',
      'terms' => $faq_tax
      )
    );

  } else {
    $taxquery = $data_array;
  }

  $args = $taxquery;

  $my_posts = get_posts($args);
  if (!empty($my_posts)): foreach($my_posts as $post): setup_postdata($post);

  ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title();?></a></li>
  <?php endforeach; wp_reset_postdata(); endif;    ?>
</ul>

 

searchform.php

<form  method="get"   action="<?php home_url(); ?>/xxxx"  >
  <dl>
    <dt></dt>
    <dd>
      <?php // wp_dropdown_categories('depth=0&orderby=name&hide_empty=0&taxonomy=faq_taxonomy&value_field=slug'); ?>
      <select name="cat">
        <option value="">未選択</option>
        <?php

        if (!empty($_GET['cat'])){
          $selected = 'selected';
        }

        $faq_args = array(
          'hide_empty' => false,
        );
        $faq_posts = get_terms('faq_taxonomy', $faq_args);
        if (!empty($faq_posts)): foreach ($faq_posts as $faq_post): 
        ?>
          <option <?php if($faq_post->slug == $_GET['cat'] ){ echo $selected; } ;?> value="<?php echo $faq_post->slug; ?>"><?php echo $faq_post->name; ?></option>
        <?php endforeach; endif; ?>
      </select>
    </dd>
  </dl>
  <dl>
    <dt>キーワード</dt>
    <dd><input type="taxt" name="key" id="s" value="<?php echo $_GET['key']; ?>" ></dd>
  </dl>
  <div class="searchform_btn">
    <input id="submit" type="submit"  value="検索">
  </div>
</form>

 

category cloud