自分のためのメモ

ウィジェットを使用せずに検索窓を設置する

まず設置したいテンプレートに

<?php get_search_form(); ?>

と記述する。すると以下が呼び出されるので準備をしておく。

searchform.phpの用意

<form method="get" action="<?php echo home_url('/'); ?>" >
<input name="s" type="text">
<button type="submit">search</button>
</form>

上記のsubmitで呼び出される検索結果の一覧を表示するために

search.phpの用意

<?php get_header(); ?>

    <h1 class="title"><?php printf( '<span>' . get_search_query() . '</span>' ); ?>の検索結果</h1>

    <?php if ( have_posts() ) : ?>
        <ul>
            <?php while (have_posts()) : the_post(); ?>
                <li>
                    <a href="<?php the_permalink(); ?>">
                        <figure>
                            <?php if ( has_post_thumbnail() ) : ?>
                                <?php
                                    the_post_thumbnail("custom-thumbsize", array(
                                        "alt"   => strip_tags(get_the_title()) . " イメージ",
                                )); ?>
                            <?php else : ?>
                                <img src="<?php echo get_stylesheet_directory_uri(); ?>/img/common/noimg.gif">
                            <?php endif; ?>
                        </figure>
                        <time><?php the_time('Y/m/d'); ?></time>
                        <h2><?php echo get_the_title(); ?></h2>
                    </a>
                </li>
            <?php endwhile; ?>
        </ul>
    <?php else : ?>
        <p>該当記事がありません</p>
    <?php endif; ?>

<?php get_footer(); ?>

※カスタム投稿のみを検索対象とする場合

まず「searchform-カスタム投稿スラッグ.php」というファイル名で利用できるようにfunctionに下準備をする。

add_filter('template_include','custom_search_template');
function custom_search_template($template){
  if ( is_search() ){
    $post_types = get_query_var('post_type');
    foreach ( (array) $post_types as $post_type )
      $templates[] = "search-{$post_type}.php";
    $templates[] = 'search.php';
    $template = get_query_template('search',$templates);
  }
  return $template;
}

次にテンプレート側で

<?php get_template_part( 'searchform','カスタム投稿スラッグ' ); ?>

で呼び出し、同様に

searchform-カスタム投稿スラッグ.php

<form method="get" action="<?php echo home_url('/'); ?>" >
    <input class="hsf box" name="s" type="text">
    <input type="hidden" name="post_type" value="カスタム投稿スラッグ">
    <button type="submit">search</button>
</form>

・search-カスタム投稿スラッグ.php

<!-- アイキャッチ、投稿日、タイトルくらいならsearch.phpと同内容 -->