WordPress:固定ページにキーワードとカスタムタクソノミーの検索結果を表示する方法
functions.phpに記述するpre_get_postsでは固定ページに検索結果を出力できません。
理由は下記のcodexページで確認できます。
注意: 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>