カテゴリーやタグ、カスタムタクソノミーを検索対象に含める方法を紹介します。
実装は簡単です。下記のコードをfunctions.phpに追加します。
function atom_search_where($where){ global $wpdb; if (is_search()) // COLLATE utf8_unicode_ciで「ひらがな」と「カタカナ」、「全角英数」と「半角英数」を区別しないでマッチさせる $where .= "OR (t.name COLLATE utf8_unicode_ci LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')"; return $where; } function atom_search_join($join){ global $wpdb; if (is_search()) $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id"; return $join; } function atom_search_groupby($groupby){ global $wpdb; // we need to group on post ID $groupby_id = "{$wpdb->posts}.ID"; if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby; // groupby was empty, use ours if(!strlen(trim($groupby))) return $groupby_id; // wasn't empty, append ours return $groupby.", ".$groupby_id; } add_filter('posts_where','atom_search_where'); add_filter('posts_join', 'atom_search_join'); add_filter('posts_groupby', 'atom_search_groupby');
これで、記事のカテゴリー、タグ、カスタムタクソノミーを検索対象に含めることができるようになります。
「ひらがな」と「カタカナ」、「全角英数」と「半角英数」を区別しないでマッチさせるようにしてあります。
参考
Include custom taxonomy term in search – WordPress Development Stack Exchange