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 プログラミング

Breadcrumb NavXTをカスタマイズ。パンくずにメインサイトを追加する方法。

2022.01.04
2831
WordPress

【WordPress】現在開いてる親タームページから子ターム事に記事一覧を取得・出力する方法

更新日:2022.07.10
3574
WordPress

【WordPress】PC・SPデバイスによってパラメータの条件を変更する方法

2024.03.07
267
WordPress プログラミング

WordPressで固定ページの名称を変更する方法

更新日:2022.04.23
3130