@@ -152,8 +152,8 @@ class WP_Date_Query {
152152 */
153153 public function __construct ( $ date_query , $ default_column = 'post_date ' ) {
154154
155- if ( isset ( $ date_query ['relation ' ] ) && ' OR ' === strtoupper ( $ date_query [ ' relation ' ] ) ) {
156- $ this ->relation = ' OR ' ;
155+ if ( isset ( $ date_query ['relation ' ] ) ) {
156+ $ this ->relation = $ this -> sanitize_relation ( $ date_query [ ' relation ' ] ) ;
157157 } else {
158158 $ this ->relation = 'AND ' ;
159159 }
@@ -233,6 +233,9 @@ public function sanitize_query( $queries, $parent_query = null ) {
233233 $ this ->validate_date_values ( $ queries );
234234 }
235235
236+ // Sanitize the relation parameter.
237+ $ queries ['relation ' ] = $ this ->sanitize_relation ( $ queries ['relation ' ] );
238+
236239 foreach ( $ queries as $ key => $ q ) {
237240 if ( ! is_array ( $ q ) || in_array ( $ key , $ this ->time_keys , true ) ) {
238241 // This is a first-order query. Trust the values and sanitize when building SQL.
@@ -1010,4 +1013,20 @@ public function build_time_query( $column, $compare, $hour = null, $minute = nul
10101013
10111014 return $ wpdb ->prepare ( "DATE_FORMAT( $ column, %s ) $ compare %f " , $ format , $ time );
10121015 }
1016+
1017+ /**
1018+ * Sanitizes a 'relation' operator.
1019+ *
1020+ * @since 6.0.3
1021+ *
1022+ * @param string $relation Raw relation key from the query argument.
1023+ * @return string Sanitized relation ('AND' or 'OR').
1024+ */
1025+ public function sanitize_relation ( $ relation ) {
1026+ if ( 'OR ' === strtoupper ( $ relation ) ) {
1027+ return 'OR ' ;
1028+ } else {
1029+ return 'AND ' ;
1030+ }
1031+ }
10131032}
0 commit comments