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】投稿記事の本文を文字数制限して表示する方法

2023.05.28
1017
WordPress プログラミング

【ACFプラグイン】Advanced Custom Fieldsの使い方・出力方法を紹介

2022.03.20
2177
WordPress プログラミング

【Contact Form 7】Form data to kintoneでkintone側に二重送信されるのを防ぐ【確認画面が原因】

2022.03.17
1254
WordPress

【WordPress】サイトの公開予約を設定する方法【メンテナンスモード】

2024.04.01
124