カスタム投稿タイプごとの検索結果ページを作る
functions.php に以下の記述を加えることで、“search-blog.php” など、“search-投稿タイプ名.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[] = "search-{$post_type}.php"; $templates[] = 'search.php'; $template = get_query_template('search',$templates); } return $template; }
参照ページ
検索フォームと検索結果ページを複数設置する
検索結果から固定ページを除外する
functions.php に以下の記述を加える
// 検索結果から固定ページを除外 function search_filter($query) { if (!$query -> is_admin && $query -> is_search) { $query -> set('post_type', array('post', 'ポストタイプ名')); } return $query; } add_filter('pre_get_posts', 'search_filter');
検索結果から除外したいページを指定する
functions.php に以下の記述を加える
// 検索結果から除外したいページを指定 function search_filter($query) { if (!$query -> is_admin && $query -> is_search) { $query -> set('post__not_in', array(3,5,7)); } return $query; } add_filter('pre_get_posts', 'search_filter');
*3,5,7 は、除外したい記事のIDに書き換える。
カスタムフィールドも検索対象に含める
デフォルトではカスタムフィールドで作成した項目は検索対象に含まれません。
サーバーからwp-includesフォルダ内にある “query.php ” ファイルを開き、検索で ” $searchand = ‘ AND ‘; ” を探して その直ぐ下に以下を記述します。
変更したい箇所が何行目になるか?WordPressのバージョンによるのですが、WordPress 4.3.1 では2095行目にありました。
// カスタムフィールドを検索対象に含める $csql = "SELECT post_id FROM $wpdb->postmeta"; $csql .= " WHERE meta_key NOT LIKE '\\_%' AND meta_value LIKE '{$n}{$term}{$n}'"; $post_ids = $wpdb->get_col($csql); if (count($post_ids)) { $search .= " OR ($wpdb->posts.ID IN (".implode(',', $post_ids)."))"; }
念のためFFFTPなどで “query.php ” ファイルのバックアップを取ってから作業した方がよいと思います。
なお、このファイルはワードプレスのバージョンアップの際に書き換えられるようなので、その都度書き換える必要があります。
検索結果のページタイトルを変更する
search.phpで読み込んでいるheader.phpの<title>~</title>の間に記入
// ページタイトルの振り分け <?php if (is_search()) { $allsearch =& new WP_Query("s=$s&posts_per_page=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; $count!=0; echo '“'.$key.'”での検索結果('.$count.'件) | '; bloginfo('name'); } else { wp_title('|', true, 'right'); bloginfo('name'); } ?>
検索結果ページのタイトル
「“○○○○○”での検索結果(○件) | サイト名」
その他のページのタイトル
「ページタイトル | サイト名」
参照ページ
WordPressの検索表示をカスタマイズする
色々やってうまく行かなかった場合は諦めてプラグインを使用しましょう。
Search Everything