PluginProbe
ElasticPress / 5.3.5
ElasticPress v5.3.5
5.3.5 5.3.4 3.6.5 3.6.6 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.7.0 4.7.1 4.7.2 5.0.0 5.0.1 5.0.2 All 108 releases
← All changes | includes/classes/Indexable/Post/DateQuery.php +31 -5 4.7.25.3.5 View file →
@@ -7,9 +7,9 @@
7 7 */
8 8
9 9 namespace ElasticPress\Indexable\Post;
10 10
11 -use \WP_Date_Query;
11 +use WP_Date_Query;
12 12
13 13 if ( ! defined( 'ABSPATH' ) ) {
14 14 // @codeCoverageIgnoreStart
15 15 exit; // Exit if accessed directly.
@@ -80,9 +80,8 @@
80 80 }
81 81 }
82 82 }
83 83
84 - // @todo implement OR filter relationships.
85 84 if ( empty( $relation ) ) {
86 85 $relation = 'AND';
87 86 }
88 87
@@ -110,8 +109,35 @@
110 109 $filter_array['and'] = array(
111 110 'bool' => $this->build_es_date_term_filter( $term_filters ),
112 111 );
113 112 }
113 + } elseif ( 'OR' === $relation ) {
114 + $should_clauses = [];
115 + foreach ( $filter_chunks['filters'] as $filter ) {
116 +
117 + $group = [];
118 + if ( ! empty( $filter['range_filters'] ) ) {
119 + $group[] = [ 'range' => $filter['range_filters'] ];
120 + }
121 +
122 + if ( ! empty( $filter['date_terms'] ) ) {
123 + foreach ( $filter['date_terms']['must'] ?? [] as $must_clause ) {
124 + $group[] = $must_clause;
125 + }
126 + }
127 +
128 + if ( $group ) {
129 + $should_clauses[] = [ 'bool' => [ 'must' => $group ] ];
130 + }
131 + }
132 +
133 + if ( $should_clauses ) {
134 + $filter_array['or'] = [
135 + 'bool' => [
136 + 'should' => $should_clauses,
137 + ],
138 + ];
139 + }
114 140 }
115 141
116 142 return $filter_array;
117 143 }
@@ -210,9 +236,9 @@
210 236 }
211 237
212 238 if ( ! empty( $query['before'] ) ) {
213 239 $range_filters = empty( $range_filters[ $column ] ) ? array( "{$column}" => array( "{$lt}" => [] ) ) : $range_filters;
214 - $range_filters[ $column ][ $lt ] = $this->build_mysql_datetime( $query['before'] );
240 + $range_filters[ $column ][ $lt ] = $this->build_mysql_datetime( $query['before'], $inclusive );
215 241 }
216 242
217 243 if ( ! empty( $query['after'] ) || ! empty( $query['before'] ) ) {
218 244 $filter_parts['range_filters'] = $range_filters;
@@ -262,13 +288,13 @@
262 288 $date_terms['must'][]['term'][ "date_terms.{$param}" ] = $value;
263 289 } elseif ( '!=' === $compare ) {
264 290 $date_terms['must_not'][]['term'][ "date_terms.{$param}" ] = $value;
265 291 } elseif ( 'IN' === $compare ) {
266 - foreach ( $value as $in_value ) {
292 + foreach ( (array) $value as $in_value ) {
267 293 $date_terms['should'][]['term'][ "date_terms.{$param}" ] = $in_value;
268 294 }
269 295 } elseif ( 'NOT IN' === $compare ) {
270 - foreach ( $value as $in_value ) {
296 + foreach ( (array) $value as $in_value ) {
271 297 $date_terms['must_not'][]['term'][ "date_terms.{$param}" ] = $in_value;
272 298 }
273 299 } elseif ( 'BETWEEN' === $compare ) {
274 300 $range_filter[ "date_terms.{$param}" ] = [];