WordPressの記事検索にカテゴリ名・タグ名も含める方法

WordPressの記事検索にカテゴリ名・タグ名を含めたい。
本記事ではこのような悩みを解決。
実装方法について解説します。
functions.phpにコードを記述
//-----------------------------------------------------
// 検索対象にカテゴリを含める
//-----------------------------------------------------
function custom_search($search, $wp_query) {
global $wpdb;
//検索ページ以外
if (!$wp_query->is_search)
return $search;
if (!isset($wp_query->query_vars))
return $search;
$search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : '');
if ( count($search_words) > 0 ) {
$search = '';
foreach ( $search_words as $word ) {
if ( !empty($word) ) {
$search_word = $wpdb-> _escape("%{$word}%");
$search .= " AND (
{$wpdb->posts}.post_title LIKE '{$search_word}'
OR {$wpdb->posts}.post_content LIKE '{$search_word}'
/*タグ名・カテゴリ名を検索対象に含める記述 start*/
OR {$wpdb->posts}.ID IN (
SELECT distinct r.object_id
FROM {$wpdb->term_relationships} AS r
INNER JOIN {$wpdb->term_taxonomy} AS tt ON r.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN {$wpdb->terms} AS t ON tt.term_id = t.term_id
WHERE t.name LIKE '{$search_word}'
OR t.slug LIKE '{$search_word}'
OR tt.description LIKE '{$search_word}'
)
/*タグ名・カテゴリ名を検索対象に含める記述 end*/
) ";
}
}
}
return $search;
}
add_filter('posts_search','custom_search', 10, 2);
上記コードをfunctions.phpに記述するだけでOKです。
すでに他の検索対象を含める記述・プラグインを実装してる場合、バッティングでエラーになる場合があるので注意してください。
以上で実装完了です。
実際に検索ボックスでカテゴリ名・タグ名のみ入力し、検索しましょう。
検索結果ページに対象のカテゴリ・タグ記事がでたら成功です。
まとめ
本記事で紹介した実装方法はデフォルト投稿タイプの検索のみ対応しております。
カスタム投稿の検索には対応しておりません。
以上で解説を終わります。
目次