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>