Blog スタッフブログ

WEB制作

[WordPress]検索テンプレートを分ける方法

コーダーのKです。

WordPressでは、検索結果ページのテンプレートファイルとして基本的にsearch.phpが使用されます。

しかし、投稿タイプごとに検索結果のデザインや内容を変えたい時など1つのsearch.phpだけでは対応が難しい場合があります。

そこで今回は、投稿タイプごとに異なる検索テンプレートを自動で切り替える方法をご紹介します。

どのような状況で分けるか

カスタム投稿タイプを使って「商品(product)」「お知らせ(news)」のコンテンツがあったとします。

しかし、検索結果ページを共通のsearch.phpにしてしまうと、投稿タイプごとのデザインや必要な情報が表示できず、ユーザーにとってわかりにくいページになってしまいます。

  • 商品検索なら商品画像や価格を表示
  • ニュース検索なら公開日やカテゴリを表示

投稿タイプごとのテンプレートを切り替える方法

テーマのfunctions.phpに追加するだけで、投稿タイプごとの検索テンプレートを自動で適用させることが可能です。

/* 検索結果テンプレート切り替え */
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[] = "{$post_type}-search.php";
    $templates[] = 'search.php';
    $template = get_query_template('search', $templates);
  }
  return $template;
}

使い方

使用したい投稿タイプごとに、テンプレートファイルをテーマフォルダに用意します。

〇〇〇〇-search.php

〇にはカスタム投稿のポストタイプに合わせます。

  • product-search.php
  • news-search.php