【WordPress】カスタム投稿タイプやタクソノミー内で絞って検索する検索フォームを複数設置する方法

  • URLをコピーしました!

スポンサーリンク

こんばんは、トウコ(@at_tokotoko)です。

今回お仕事で検索フォームを設置するものがありましたので、備忘録として残しておきます。

もくじ

カスタム投稿タイプやタクソノミーごとに検索フォームを設置したい

カスタム投稿タイプの記事だけを検索してもらいたいこともあると思います。

私のサイトだったらカスタム投稿タイプを制作実績で使っているので、作品だけを検索したい!とか。

まずsearchform-○○.phpという感じで新しくファイルを作り、下記を書き込みます。

<form role="search" method="get" class="search-form" action="<?php echo get_post_type_archive_link('hogehoge'); ?>">
	<input type="search" class="search-field" name="s" value="<?php echo get_search_query(); ?>"  placeholder="例)キーワード" />
	
	<input type="submit" value="検索する">
</form>

action<?php echo get_post_type_archive_link('hogehoge'); ?>

がポイントです。普通だとトップページとかにするんですが、アーカイブページにすることでそのアーカイブだけの検索結果になります。

hogehogeをカスタム投稿タイプに変えてください。

私がやった時はタクソノミーのアーカイブにしました。タクソノミーでもいけます。

searchform-○○.phpは検索フォームを設置したい場所に貼りましょう。

<div class="search-box">
    <?php get_template_part('searchform-hogehoge'); ?>
</div>

こんな感じで。

私はアーカイブページに貼りました。

アーカイブページで検索結果を表示する

アーカイブページに検索フォームを貼り付ければ、検索結果もそのアーカイブページの仕様で表示されます。

検索結果がうまく出ているかのために以下を入れます。

<?php if(is_search()): ?>
	//処理
<?php else: ?>
	//処理
<?php endif; ?>

検索した結果を出す処理と、そうでない場合に出す処理です。

今回は以下のようにしました。

<?php if(is_search()): ?>
	「<?php the_search_query(); ?>」の検索結果 <?php my_result_count(); ?>
<?php else: ?>
	<?php echo $term_name; ?>
<?php endif; ?>

検索して出た結果キーワード○件と出て、

検索したわけではないアーカイブページとして表示した場合、タクソノミーの名前が出ます。(ここはカテゴリーの名前にする人もいると思います)

キーワード○件を表示したい場合は以下のコードをfunctions.phpに入れてください。

上記のmy_result_count()がカウントの部分になります。

// 検索結果に○件中○件表示を追加
function my_result_count() {
global $wp_query;
$paged = get_query_var( 'paged' ) - 1;
$ppp   = get_query_var( 'posts_per_page' );
$count = $total = $wp_query->post_count;
$from  = 0;
if ( 0 < $ppp ) {
$total = $wp_query->found_posts;
if ( 0 < $paged )
$from  = $paged * $ppp;
}
printf(
'<span class="resAll">%1$s</span>件中<span class="resPaging">%2$s%3$s</span>件目',
$total,
( 1 < $count ? ($from + 1 . '〜') : '' ),
($from + $count )
);
}

参考になりました。ありがとうございます!

検索結果ページを作る

アーカイブページを使わない場合はsearch.phpで個別に作ってください!

<?php if(is_post_type_archive('ポストタイプ名')): ?>
  //指定のポストタイプの処理
  <?php else: ?>
  //それ以外の処理
  <?php endif; ?>

これで複数の検索結果の条件分岐ができます。

まとめ

なんかもしかしたらたままたうまくいったのかもしれないですけど、意外と簡単に設置できました。
自分で一から作る場合はもう少しいじらないといけないかもしれませんが
既存のテーマをカスタマイズするならこれでいけると思います。

困っている方の助けになりますように。

スポンサーリンク

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

もくじ