Written by Kasumi

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です。

すでに他の検索対象を含める記述・プラグインを実装してる場合、バッティングでエラーになる場合があるので注意してください。

以上で実装完了です。

実際に検索ボックスでカテゴリ名・タグ名のみ入力し、検索しましょう。

検索結果ページに対象のカテゴリ・タグ記事がでたら成功です。

まとめ

本記事で紹介した実装方法はデフォルト投稿タイプの検索のみ対応しております。

カスタム投稿の検索には対応しておりません。

以上で解説を終わります。

目次

関連記事

WordPress

【WordPress】自作で関連記事を実装する方法【プラグインなし】

2022.06.28
194
WordPress プログラミング

【wordpress】全テンプレートページで使用可能なグローバル変数を定義する方法【簡単】

2022.02.23
940
WordPress

【簡単】WordPressで編集するテンプレートファイルを一目で確認する方法

2022.09.07
133
WordPress

WordPressで使われてるエディタ(ブロックorクラシック)によってif文で条件分岐する方法

2022.10.30
75