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

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

以上で実装完了です。

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

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

まとめ

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

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

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

Ads

関連記事

WordPress プログラミング

【ワードプレス】親子カテゴリ・親子ターム順にリンクリストを自動で表示する方法

更新日:2022.05.31
277
WordPress

トップページの記事一覧で2ページ目以降のタイトルタグにページ番号を入れる方法

更新日:2019.11.28
94
WordPress

投稿タイプのカテゴリーページでURLから categoryを削除する方法【ワードプレス】

更新日:2019.11.28
118
WordPress プログラミング

投稿の一覧ページで、過去記事を一番先頭に持ってくる方法【ワードプレス】

2019.11.29
113