I have been looking for a way to search use the search_query with the WP_Query and include taxonomy terms.
Many solutions only works using the function is_search(). Using the tax_query for me was not an option here as I wanted to use the search query field “s” to search under the post_content, title and be able to work with other search plugins as well.
The following filter will help you to achieve that:
        
        
          
            
          
          
        
        function extend_search_taxonomy_terms( $search, $wp_query ) {
  global $wpdb;
  if ( empty($search) ) {
    return $search;
  }
  $terms = $wp_query->query_vars['s'];
  $exploded = explode( ' ', $terms );
  
  if( $exploded === FALSE || count( $exploded ) == 0 ) {
    $exploded = array( 0 => $terms );
  }
  $search = '';
    
  foreach( $exploded as $tag ) {
    $search .= " AND (
      ( $wpdb->posts.post_title LIKE '%$tag%' )
      OR EXISTS
      ( SELECT * FROM $wpdb->term_relationships 
        LEFT JOIN $wpdb->terms ON $wpdb->term_relationships.term_taxonomy_id = $wpdb->terms.term_id
        WHERE $wpdb->terms.name LIKE '%$tag%' AND $wpdb->term_relationships.object_id = $wpdb->posts.ID
      )
    )";
  }
  return $search;
}
      Then you have to add this filter whenever you need it:
        
        
          
            
          
          
        
        
// Add your filter
add_filter('posts_search', 'extend_search_taxonomy_terms', 500, 2);
$args = array(
 's' => 'foo',
 'post_type' => 'my-post-type'
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) {
  // Loop your posts
}
// Remove your filter
remove_filter('posts_search', 'extend_search_taxonomy_terms', 500, 2);