<?php
/**
 * Add post meta to search query in where part
 * 
 * @param string $where Where query part
 * 
 * @return string
 */
function modify_wp_search_where( $where ) {
	if ( is_search() ) {
		global $wpdb, $wp;

		$where = preg_replace(
			"/($wpdb->posts.post_title LIKE '{$wpdb->placeholder_escape()}{$wp->query_vars['s']}{$wpdb->placeholder_escape()}'\))/i",
			"$0 OR ($wpdb->postmeta.meta_value LIKE '%{$wp->query_vars['s']}%')",
			$where
			);

		add_filter( 'posts_join_request', 'modify_wp_search_join' );
		add_filter( 'posts_distinct_request', function() {
			return 'DISTINCT';
		} );
	}

	return $where;
}
add_action( 'posts_where_request', 'modify_wp_search_where' );

/**
 * Join post meta to search query
 * 
 * @param string $join Join query part
 * 
 * @return string
 */
function modify_wp_search_join( $join ) {
	global $wpdb;

	return $join .= " LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) ";
}