PluginProbe ʕ •ᴥ•ʔ
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid / trunk
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid vtrunk
7.9.3 7.9.2 trunk 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.2.0 4.2.1 4.2.2 4.2.3 5.0.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 6.0.0 7.0.0 7.0.1 7.0.2 7.1.0 7.2.0 7.2.1 7.2.10 7.2.11 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8 7.2.9 7.3.0 7.3.1 7.4.0 7.4.1 7.4.2 7.4.3 7.5.0 7.6.0 7.6.1 7.7.0 7.7.1 7.7.10 7.7.11 7.7.12 7.7.13 7.7.14 7.7.15 7.7.16 7.7.17 7.7.18 7.7.19 7.7.2 7.7.20 7.7.21 7.7.22 7.7.3 7.7.4 7.7.5 7.7.6 7.7.7 7.7.8 7.7.9 7.8.0 7.8.1 7.8.2 7.8.3 7.8.4 7.8.5 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1
the-post-grid / app / Widgets / elementor / rtTPGElementorQuery.php
the-post-grid / app / Widgets / elementor Last commit date
widgets 4 months ago base.php 9 months ago rtTPGElementorHelper.php 3 months ago rtTPGElementorQuery.php 4 months ago
rtTPGElementorQuery.php
443 lines
1 <?php
2 /**
3 * @author RadiusTheme
4 * @since 1.0
5 * @version 1.2
6 */
7
8 use RT\ThePostGrid\Helpers\Fns;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit;
12 }
13
14 class rtTPGElementorQuery {
15
16 static function get_terms_id( $id, $type ) {
17 $data = [];
18 $arr = get_the_terms( $id, $type );
19 if ( is_array( $arr ) ) {
20 foreach ( $arr as $key => $val ) {
21 $data[] = $val->term_id;
22 }
23 }
24
25 return $data;
26 }
27
28 /**
29 * Post Query for normal grid widget
30 *
31 * @param $data
32 * @param string $prefix
33 *
34 * @return array
35 */
36 public static function post_query( $data, $prefix = '' ): array {
37 $_post_type = ! empty( $data['post_type'] ) ? esc_html( $data['post_type'] ) : 'post';
38 $_post_types = ! empty( $data['post_types'] ) ? Fns::escape_array( $data['post_types'] ) : [ 'post' ];
39
40 if ( rtTPG()->hasPro() && 'yes' === $data['multiple_post_type'] ) {
41 $post_type = Fns::available_post_types( $_post_types );
42 } else {
43 $post_type = Fns::available_post_type( $_post_type );
44 }
45 /**
46 * Post status has been removed. The commented code will be deleted later.
47 */
48 // $post_status = isset( $data['post_status'] ) ? esc_html( $data['post_status'] ) : 'publish';
49 // 'post_status' => Fns::available_user_post_status( $post_status ),
50 $args = [
51 'post_type' => $post_type,
52 'post_status' => 'publish',
53 ];
54
55 if ( $data['post_id'] ) {
56 $post_ids = explode( ',', esc_html( $data['post_id'] ) );
57 $post_ids = array_map( 'trim', $post_ids );
58
59 $args['post__in'] = $post_ids;
60 }
61
62 if ( $prefix !== 'slider' && 'show' === $data['show_pagination'] ) {
63 $_paged = is_front_page() ? 'page' : 'paged';
64 $args['paged'] = get_query_var( $_paged ) ? absint( get_query_var( $_paged ) ) : 1;
65 }
66
67 if ( rtTPG()->hasPro() && 'yes' == $data['ignore_sticky_posts'] ) {
68 $args['ignore_sticky_posts'] = 1;
69 }
70
71 if ( $orderby = $data['orderby'] ) {
72 $order_by = ( $orderby == 'meta_value_datetime' ) ? 'meta_value_num' : $orderby;
73 $args['orderby'] = esc_html( $order_by );
74
75 if ( in_array( $orderby, [ 'meta_value', 'meta_value_num', 'meta_value_datetime' ] ) && $data['meta_key'] ) {
76 $args['meta_key'] = esc_html( $data['meta_key'] ); //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
77 } elseif ( 'include_only' == $orderby ) {
78 $args['orderby'] = 'post__in';
79 }
80 }
81
82 if ( $data['order'] ) {
83 $args['order'] = esc_html( $data['order'] );
84 }
85
86 if ( $data['instant_query'] ) {
87 $args = Fns::get_instant_query( $data['instant_query'], $args );
88 }
89
90 if ( $data['author'] ) {
91 $args['author__in'] = array_map( 'intval', $data['author'] );
92 }
93
94 if ( isset( $data['date_range'] ) ) :
95 if ( rtTPG()->hasPro() && $data['date_range'] ) {
96 if ( strpos( $data['date_range'], 'to' ) ) {
97 $date_range = explode( 'to', esc_html( $data['date_range'] ) );
98 $args['date_query'] = [
99 [
100 'after' => trim( $date_range[0] ),
101 'before' => trim( $date_range[1] ),
102 'inclusive' => true,
103 ],
104 ];
105 }
106 }
107 endif;
108
109 if ( rtTPG()->hasPro() && 'yes' === $data['multiple_post_type'] ) {
110 $_taxonomies = [];
111 foreach ( $post_type as $ptype ) {
112 $_obj = get_object_taxonomies( $ptype, 'objects' );
113 foreach ( $_obj as $key => $obj ) {
114 $_taxonomies[ $key ] = $obj;
115 }
116 }
117 $taxo_id = '_ids2';
118 } else {
119 $_taxonomies = get_object_taxonomies( $post_type, 'objects' );
120 $taxo_id = '_ids';
121 }
122
123 foreach ( $_taxonomies as $index => $object ) {
124 if ( in_array( $object->name, Fns::get_excluded_taxonomy() ) ) {
125 continue;
126 }
127
128 $setting_key = $object->name . $taxo_id;
129
130 if ( $prefix !== 'slider' && rtTPG()->hasPro() && 'show' === $data['show_taxonomy_filter'] ) {
131 if ( ( $data[ $data['post_type'] . '_filter_taxonomy' ] == $object->name ) && isset( $data[ $object->name . '_default_terms' ] ) && $data[ $object->name . '_default_terms' ] !== '0' ) {
132 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
133 $args['tax_query'][] = [
134 'taxonomy' => $data[ $data['post_type'] . '_filter_taxonomy' ],
135 'field' => 'term_id',
136 'terms' => $data[ $object->name . '_default_terms' ],
137 ];
138 } else {
139 if ( ! empty( $data[ $setting_key ] ) ) {
140 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
141 $args['tax_query'][] = [
142 'taxonomy' => $object->name,
143 'field' => 'term_id',
144 'terms' => $data[ $setting_key ],
145 ];
146 }
147 }
148 } else {
149 if ( ! empty( $data[ $setting_key ] ) ) {
150 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
151 $args['tax_query'][] = [
152 'taxonomy' => $object->name,
153 'field' => 'term_id',
154 'terms' => $data[ $setting_key ],
155 ];
156 }
157 }
158 }
159
160 if ( ! empty( $args['tax_query'] ) && $data['relation'] ) {
161 $args['tax_query']['relation'] = esc_html( $data['relation'] ); //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
162 }
163
164 if ( $data['post_keyword'] ) {
165 $args['s'] = esc_html( $data['post_keyword'] );
166 }
167
168 $offset_posts = $excluded_ids = [];
169 if ( $data['exclude'] || $data['offset'] ) {
170 if ( $data['exclude'] ) {
171 $excluded_ids = explode( ',', esc_html( $data['exclude'] ) );
172 $excluded_ids = array_map( 'trim', $excluded_ids );
173 }
174
175 if ( $data['offset'] ) {
176 $_temp_args = $args;
177 unset( $_temp_args['paged'] );
178 $_temp_args['posts_per_page'] = $data['offset'];
179 $_temp_args['fields'] = 'ids';
180
181 $offset_posts = get_posts( $_temp_args );
182 }
183
184 $excluded_post_ids = array_merge( $offset_posts, $excluded_ids );
185 $args['post__not_in'] = array_unique( $excluded_post_ids ); //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
186 }
187
188 if ( $prefix !== 'slider' ) {
189 if ( $data['post_limit'] ) {
190 $tempArgs = $args;
191 $tempArgs['posts_per_page'] = intval( $data['post_limit'] );
192 $tempArgs['paged'] = 1;
193 $tempArgs['fields'] = 'ids';
194 if ( ! empty( $offset_posts ) ) {
195 $tempArgs['post__not_in'] = $offset_posts; //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
196 }
197
198 $tempQ = new \WP_Query( apply_filters( 'tpg_sc_temp_query_args', $tempArgs ) );
199
200 if ( ! empty( $tempQ->posts ) ) {
201 $_post_per_page = ( 'show' == $data['show_pagination'] && $data['display_per_page'] ) ? $data['display_per_page'] : ( 'show' == $data['show_pagination'] ? get_option( 'posts_per_page' ) : $data['post_limit'] );
202 if ( $data['post_limit'] > 0 ) {
203 $args['post__in'] = $tempQ->posts;
204 }
205 $args['posts_per_page'] = intval( $_post_per_page );
206 }
207 } else {
208 $_posts_per_page = 9;
209 if ( 'grid' === $prefix ) {
210 if ( $data['grid_layout'] == 'grid-layout5' ) {
211 $_posts_per_page = 5;
212 } elseif ( in_array( $data['grid_layout'], [ 'grid-layout6', 'grid-layout6-2' ] ) ) {
213 $_posts_per_page = 3;
214 } elseif ( in_array( $data['grid_layout'], [ 'grid-layout5', 'grid-layout5-2' ] ) ) {
215 $_posts_per_page = 5;
216 }
217 } elseif ( 'list' === $prefix ) {
218 if ( in_array( $data['list_layout'], [ 'list-layout2', 'list-layout2-2' ] ) ) {
219 $_posts_per_page = 7;
220 } elseif ( in_array( $data['list_layout'], [ 'list-layout3', 'list-layout3-2' ] ) ) {
221 $_posts_per_page = 5;
222 }
223 } elseif ( 'grid_hover' === $prefix ) {
224 if ( in_array( $data['grid_hover_layout'], [ 'grid_hover-layout4', 'grid_hover-layout4-2' ] ) ) {
225 $_posts_per_page = 7;
226 } elseif ( in_array(
227 $data['grid_hover_layout'],
228 [
229 'grid_hover-layout5',
230 'grid_hover-layout5-2',
231 ]
232 ) ) {
233 $_posts_per_page = 3;
234 } elseif ( in_array(
235 $data['grid_hover_layout'],
236 [
237 'grid_hover-layout6',
238 'grid_hover-layout6-2',
239 'grid_hover-layout9',
240 'grid_hover-layout9-2',
241 'grid_hover-layout10',
242 'grid_hover-layout11',
243 ]
244 )
245 ) {
246 $_posts_per_page = 4;
247 } elseif ( in_array(
248 $data['grid_hover_layout'],
249 [
250 'grid_hover-layout7',
251 'grid_hover-layout7-2',
252 'grid_hover-layout8',
253 ]
254 ) ) {
255 $_posts_per_page = 5;
256 } elseif ( in_array(
257 $data['grid_hover_layout'],
258 [
259 'grid_hover-layout6',
260 'grid_hover-layout6-2',
261 ]
262 ) ) {
263 $_posts_per_page = 4;
264 }
265 }
266
267 $args['posts_per_page'] = $data['display_per_page'] ?: $_posts_per_page;
268 }
269 } else {
270 $slider_per_page = $data['post_limit'];
271 if ( $data['slider_layout'] == 'slider-layout10' ) {
272 $slider_reminder = ( intval( $data['post_limit'], 10 ) % 5 );
273 if ( $slider_reminder ) {
274 $slider_per_page = ( $data['post_limit'] - $slider_reminder + 5 );
275 }
276 }
277 $args['posts_per_page'] = intval( $slider_per_page );
278 }
279
280 return apply_filters( 'tpg_sc_query_args', $args );
281 }
282
283 /**
284 * Post Query for page builder block
285 *
286 * @param $data
287 * @param string $prefix
288 * @param string $template_type
289 *
290 * @return array
291 */
292 public static function post_query_builder( $data, $prefix = '', $template_type = '' ): array {
293 if ( 'single' === $template_type ) {
294 $rt_post_cat = wp_get_object_terms( $data['last_post_id'], $data['taxonomy_lists'], [ 'fields' => 'ids' ] );
295 $args = [
296 'post_type' => 'post',
297 'post_status' => 'publish',
298 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
299 'tax_query' => [
300 [
301 'taxonomy' => $data['taxonomy_lists'],
302 'field' => 'id',
303 'terms' => $rt_post_cat,
304 ],
305 ],
306 'post__not_in' => [ $data['last_post_id'] ], //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
307 ];
308
309 if ( $orderby = $data['orderby'] ) {
310 $order_by = $data['orderby'] == 'meta_value_datetime' ? 'meta_value_num' : $data['orderby'];
311 $args['orderby'] = esc_html( $order_by );
312
313 if ( in_array( $orderby, [ 'meta_value', 'meta_value_num' ] ) && $data['meta_key'] ) {
314 $args['meta_key'] = esc_html( $data['meta_key'] ); //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
315 }
316 }
317
318 if ( $data['order'] ) {
319 $args['order'] = esc_html( $data['order'] );
320 }
321
322 $slider_per_page = $data['post_limit'];
323 if ( $data['slider_layout'] == 'slider-layout10' ) {
324 $slider_reminder = ( intval( $data['post_limit'] ) % 5 );
325 if ( $slider_reminder ) {
326 $slider_per_page = ( $data['post_limit'] - $slider_reminder + 5 );
327 }
328 }
329 $args['posts_per_page'] = absint( $slider_per_page );
330 } else {
331 $args = [
332 'post_type' => 'post',
333 'post_status' => 'publish',
334 'posts_per_page' => absint( $data['post_limit'] ),
335 ];
336
337 $excluded_ids = null;
338
339 if ( $data['exclude'] || $data['offset'] ) {
340 $excluded_ids = [];
341 if ( $data['exclude'] ) {
342 $excluded_ids = explode( ',', $data['exclude'] );
343 $excluded_ids = array_map( 'trim', $excluded_ids );
344 }
345
346 $offset_posts = [];
347 if ( $data['offset'] ) {
348 $_temp_args = [
349 'post_type' => 'post',
350 'posts_per_page' => absint( $data['offset'] ),
351 'post_status' => 'publish',
352 'fields' => 'ids',
353 ];
354
355 if ( is_tag() ) {
356 $_temp_args['tag'] = get_query_var( 'tag' );
357 }
358
359 if ( is_category() ) {
360 $_temp_args['cat'] = get_query_var( 'cat' );
361 }
362
363 if ( is_author() ) {
364 $_temp_args['author'] = get_query_var( 'author' );
365 }
366
367 if ( is_date() ) {
368 $year = get_query_var( 'year' );
369 $monthnum = get_query_var( 'monthnum' );
370 $day = get_query_var( 'day' );
371
372 $_temp_args = [
373 'date_query' => [
374 [
375 'year' => $year,
376 'month' => $monthnum,
377 'day' => $day,
378 ],
379 ],
380 ];
381 }
382
383 $offset_posts = get_posts( $_temp_args );
384 }
385
386 $excluded_post_ids = array_merge( $offset_posts, $excluded_ids );
387 $args['post__not_in'] = array_unique( $excluded_post_ids ); //phpcs:ignore WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in
388 }
389
390 if ( $data['post_id'] ) {
391 $post_ids = explode( ',', esc_html( $data['post_id'] ) );
392 $post_ids = array_map( 'trim', $post_ids );
393
394 $args['post__in'] = $post_ids;
395
396 if ( $excluded_ids != null && is_array( $excluded_ids ) ) {
397 $args['post__in'] = array_diff( $post_ids, $excluded_ids );
398 }
399 }
400
401 if ( 'slider' !== $prefix && 'show' === $data['show_pagination'] ) {
402 $args['paged'] = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
403 }
404
405 if ( is_tag() ) {
406 $args['tag'] = get_query_var( 'tag' );
407 }
408
409 if ( is_category() ) {
410 $args['cat'] = get_query_var( 'cat' );
411 }
412
413 if ( is_author() ) {
414 $args['author'] = get_query_var( 'author' );
415 }
416
417 if ( is_date() ) {
418 $year = get_query_var( 'year' );
419 $monthnum = get_query_var( 'monthnum' );
420 $day = get_query_var( 'day' );
421
422 $args = [
423 'date_query' => [
424 [
425 'year' => $year,
426 'month' => $monthnum,
427 'day' => $day,
428 ],
429 ],
430 ];
431 }
432
433 if ( is_search() ) {
434 $search = get_query_var( 's' );
435 $args['s'] = $search;
436 }
437 }
438
439 return $args;
440 }
441
442 }
443