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

【簡単】Custom Post Type UI で カスタム投稿タイプのアーカイブページに親ページ(任意の固定ページ)を設定する方法

更新日:2022.04.13
6235
WordPress

WordPressの管理画面にあるデフォルトの投稿項目を非表示にする方法

2023.02.20
1382
WordPress

WordPressで特定のページのみURL末尾スラッシュを追加もしくは削除する方法

2023.10.05
182
WordPress

カスタムフィールドの定番。Advanced Custom Fieldsプラグインを使ってみよう【ワードプレス】

更新日:2019.11.28
813