WordPressでカスタムフィールドも検索対象に含めてみました。
といっても、全てのカスタムフィールドを検索対象にするといろいろとアレなので、特定の名前を持つもののみに限定しなければなりません。
そこは、
pm.meta_key IN ( 'meta_key1', 'meta_key2', 'meta_key3' )
の meta_keyn の部分を調整してもらえれば、大丈夫だと思います。
function search_custom_field_query( $search, $wp_query ) { if ( $wp_query->is_main_query() && $wp_query->is_search() && ! is_admin() ) { $q = $wp_query->query_vars; $n = !empty($q['exact']) ? '' : '%'; $add_search = ''; foreach( (array) $q['search_terms'] as $term ) { $term = esc_sql( like_escape( $term ) ); $add_search = " OR ( pm.meta_key IN ( 'meta_key1', 'meta_key2', 'meta_key3' ) AND pm.meta_value LIKE '{$n}{$term}{$n}')"; } $search = str_replace( ')))', ')' . $add_search . '))', $search ); } return $search; } add_filter( 'posts_search', 'search_custom_field_query', 10, 2 ); function search_custom_field_join( $join, $wp_query ) { global $wpdb; if ( $wp_query->is_main_query() && $wp_query->is_search() && ! is_admin() ) { $join .= " INNER JOIN {$wpdb->postmeta} AS pm ON pm.post_id = {$wpdb->posts}.ID"; } return $join; } add_filter( 'posts_join', 'search_custom_field_join', 10, 2 ); /* * */ function search_custom_field_groupby( $groupby, $wp_query ) { global $wpdb; if ( $wp_query->is_main_query() && $wp_query->is_search() && ! is_admin() ) { $groupby = "{$wpdb->posts}.ID"; } return $groupby; } add_filter( 'posts_groupby', 'search_custom_field_groupby', 10, 2 );
え?Search Everything 使えって?