Index: meta.php
===================================================================
--- meta.php	(revision 27334)
+++ meta.php	(working copy)
@@ -829,6 +829,17 @@
 					unset( $join[$i] );
 					continue;
 				}
+			} elseif ( in_array( $meta_compare, array( 'LIKE', 'NOT LIKE' ) ) && is_array( $meta_value ) ) {
+				$mk = array_keys( $meta_value );
+				if ( 1 !== count( $mk ) || ! in_array( strtoupper( $mk[0] ), array( 'AND', 'OR' ) ) || ! is_array( $meta_value[ $mk[0] ] ) || empty( $meta_value[ $mk[0] ] ) ) {
+					_doing_it_wrong( __METHOD__, sprintf( __( 'Meta queries having the %1$s or %2$s compare operators accept array values with this format: %3$s; possible operator values: %4$s.' ),
+						'<code>LIKE</code>', '<code>NOT LIKE</code>', "<code>array( 'operator' => array( 'value 1', 'value 2', ... ) )</code>", "'<code>AND</code>', '<code>OR</code>'" ), '3.9' );
+					unset( $join[$i] );
+					continue;
+				}
+
+				$like_compare_relation = strtoupper( $mk[0] );
+				$like_compare_values = $meta_value[ $mk[0] ];
 			} else {
 				$meta_value = trim( $meta_value );
 			}
@@ -839,16 +850,34 @@
 				$meta_value = array_slice( $meta_value, 0, 2 );
 				$meta_compare_string = '%s AND %s';
 			} elseif ( 'LIKE' == substr( $meta_compare, -4 ) ) {
-				$meta_value = '%' . like_escape( $meta_value ) . '%';
-				$meta_compare_string = '%s';
+				if ( ! isset( $like_compare_values ) ) {
+					$meta_value = '%' . like_escape( $meta_value ) . '%';
+					$meta_compare_string = '%s';
+				} else {
+					$where_term = '';
+					foreach ( $like_compare_values as $like_value ) {
+						$like_value = '%' . like_escape( trim( $like_value ) ) . '%';
+						$term = $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} %s", $like_value );
+						if ( ! empty( $where_term ) ) {
+							$where_term .= " {$like_compare_relation} ";
+						}
+						$where_term .= $term;
+					}
+					$where_term = '(' . $where_term . ')';
+				}
 			} else {
 				$meta_compare_string = '%s';
 			}
 
-			if ( ! empty( $where[$k] ) )
+			if ( ! empty( $where[$k] ) ) {
 				$where[$k] .= ' AND ';
+			}
 
-			$where[$k] = ' (' . $where[$k] . $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string})", $meta_value );
+			if ( ! isset( $where_term ) ) {
+				$where_term = $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string}", $meta_value );
+			}
+
+			$where[$k] = ' (' . $where[$k] . $where_term . ')';
 		}
 
 		$where = array_filter( $where );
