通常の「サイト内検索」をした時に、タイトルの文字より投稿日順(&記事内容)が優先され、望みの記事ページが上位表示されなく困っておりました。プラグインの「Relevanssi」や「SearchWP Live Ajax Search」を使用しても、少しだけ上位になるだけで、一番上までこず。
しかし、子テーマの「functions.php」に下記コードをコピペするだけで、記事タイトルの文字を優先的に上位表示することができたので、備忘録として残しておきます。


やり方
下記コードを「functions.php」に貼り付けて終了です。
functions.php
/*************************************************
サイト内検索のタイトル内容を上位表示させる方法
**************************************************/
function custom_search_query( $query ) {
if ( $query->is_search && !is_admin() ) {
global $wpdb;
$search_term = $query->query_vars['s'];
// カスタム検索クエリの設定
$query->set( 'orderby', 'relevance' );
$query->set( 'order', 'DESC' );
$query->set( 'posts_where', "
AND (
{$wpdb->posts}.post_title LIKE '%$search_term%'
OR {$wpdb->posts}.post_content LIKE '%$search_term%'
)
" );
$query->set( 'posts_orderby', "
CASE
WHEN {$wpdb->posts}.post_title LIKE '%$search_term%' THEN 1
ELSE 2
END, {$wpdb->posts}.post_date DESC
" );
}
}
add_action( 'pre_get_posts', 'custom_search_query' );
WordPress管理画面の「テーマファイルエディター」を開く
WordPress管理画面→外観→テーマファイルエディターを開く。

functions.phpに貼り付ける
子テーマの「functions.php」を開き、上記のコードをコピーして「ファイルを更新」すると完了です。

