Wordpressに標準装備されているキーワード検索機能は、デフォルトのままだと検索対象が『投稿タイトル』+『記事の全文』検索になっています。サイトの構成によっては、『記事タイトル』のみを検索対象としたいことがあるのではないでしょうか。 

今回は、Wordpressのキーワード検索を『タイトルのみの検索』に設定する手順を紹介します。

Wordpressのキーワード検索を『タイトル検索』にする手順

キーワード検索を『タイトルのみ』に設定するにはいくつかの方法があります。

Wordpressのデフォルト検索機能を編集するには、WPのコアファイルであるwp-includes/query.phpを編集する方法がありますが、この手法ではバージョンアップの度にファイルが上書きされるため、メンテナンスの手間がかかります。

ですので、今回はfunction.phpにフィルターを設定し、Wordpressの検索機能を書き換える方法を紹介します。
この方法でも、コアファイルquery.phpを直接カスタムした場合と同じ結果が得られます。

利用中のテーマのfunction.phpに下記のコードを記述

WPメニューの『外観』→『テーマ編集』へ進み、右側のファイル名リストから『テーマのための関数(functions.php)』をクリック。functions.phpの編集画面へ進みます。

■function.phpに下記のコードを追加。
//検索対象を『タイトルのみ』にする

function
__search_by_title_only( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search; // skip processing - no search term in query
$q
= $wp_query->query_vars;
$n
= ! empty( $q['exact'] ) ? '' : '%';
$search
=
$searchand
= '';
foreach ( (array) $q['search_terms'] as $term ) {
$term
= esc_sql( like_escape( $term ) );
$search
.= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand
= ' AND ';
}
if ( ! empty( $search ) ) {
$search
= " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search
.= " AND ($wpdb->posts.post_password = '') ";
}
return $search;
}
add_filter
( 'posts_search', '__search_by_title_only', 500, 2 );

//検索対象を『タイトルのみ』にする-終了
※functions.phpの編集は、自己責任でお願いします。心配な人は編集前にバックアップを。
//緑の文字はfunctionに対するコメントアウトです。
後日コードを誤削除してしまわないように、分かりやすいコメントでくくっておきましょう。


作業はこれだけで完了です。 functions.phpファイルを上書き更新すると、検索結果の対象がタイトルのみに変更されるはずです。

検索をデフォルトに戻したい場合は、上記のコードを削除すれば元に戻ります。 

WP『タイトル検索』用コードの解説

Wordpressの検索用のメイン関数は、query.phpファイルの2190行辺りに記述されています。

オリジナルのコードには下記の記述があり、このコードが『検索結果に記事本文(コンテンツ)を含む』というSQL文を生成しています。

 OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))";

なので、フィルターでこのコードを除外してあげると、検索対象から記事本文(コンテンツ部分)が除外されるということです。

この辺りのコードをいじれば、目的に合わせて詳細なカスタム検索が実装できると思います。

参考:Make wordpress search only in post title
前の記事次の記事