PluginProbe ʕ •ᴥ•ʔ
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid / 4.2.0
The Post Grid – Shortcode, Gutenberg Blocks and Elementor Addon for Post Grid v4.2.0
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 3 years ago base.php 3 years ago rtTPGElementorHelper.php 3 years ago rtTPGElementorQuery.php 3 years ago
rtTPGElementorQuery.php
373 lines
1 <?php
2 /**
3 * Elementor Query Class
4 *
5 * @package RT_TPG
6 */
7
8 // Do not allow directly accessing this file.
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit( 'This script cannot be accessed directly.' );
11 }
12
13 /**
14 * Elementor Query Class
15 */
16 class rtTPGElementorQuery {
17
18 /**
19 * Post Query for normal grid widget
20 *
21 * @param $data
22 * @param string $prefix
23 *
24 * @return array
25 */
26 public static function post_query( $data, $prefix = '' ): array {
27 $args = [
28 'post_type' => [ $data['post_type'] ],
29 'post_status' => $data['post_status'],
30 ];
31
32 $excluded_ids = null;
33
34 if ( $data['post_id'] ) {
35 $post_ids = explode( ',', $data['post_id'] );
36 $post_ids = array_map( 'trim', $post_ids );
37
38 $args['post__in'] = $post_ids;
39
40 if ( $excluded_ids != null && is_array( $excluded_ids ) ) {
41 $args['post__in'] = array_diff( $post_ids, $excluded_ids );
42 }
43 }
44
45 if ( 'slider' !== $prefix && 'show' === $data['show_pagination'] ) {
46 $_paged = is_front_page() ? 'page' : 'paged';
47 $args['paged'] = get_query_var( $_paged ) ? absint( get_query_var( $_paged ) ) : 1;
48 }
49
50 if ( rtTPG()->hasPro() && 'yes' == $data['ignore_sticky_posts'] ) {
51 $args['ignore_sticky_posts'] = 1;
52 }
53
54 if ( $orderby = $data['orderby'] ) {
55 if ( ! rtTPG()->hasPro() && 'rand' == $orderby ) {
56 $orderby = 'date';
57 }
58
59 $args['orderby'] = $orderby;
60 }
61
62 if ( $data['order'] ) {
63 $args['order'] = $data['order'];
64 }
65
66 if ( $data['author'] ) {
67 $args['author__in'] = $data['author'];
68 }
69
70 if ( rtTPG()->hasPro() && $data['date_range'] ) {
71 if ( strpos( $data['date_range'], 'to' ) ) {
72 $date_range = explode( 'to', $data['date_range'] );
73 $args['date_query'] = [
74 [
75 'after' => trim( $date_range[0] ),
76 'before' => trim( $date_range[1] ),
77 'inclusive' => true,
78 ],
79 ];
80 }
81 }
82
83 $_taxonomies = get_object_taxonomies( $data['post_type'], 'objects' );
84
85 foreach ( $_taxonomies as $index => $object ) {
86 if ( in_array( $object->name, Custom_Widget_Base::get_excluded_taxonomy() ) ) {
87 continue;
88 }
89
90 if ( $prefix !== 'slider' && rtTPG()->hasPro() && 'show' === $data['show_taxonomy_filter'] ) {
91 if ( ( $data[ $data['post_type'] . '_filter_taxonomy' ] == $object->name ) && $data[ $object->name . '_default_terms' ] !== '0' ) {
92 $args['tax_query'][] = [
93 'taxonomy' => $data[ $data['post_type'] . '_filter_taxonomy' ],
94 'field' => 'term_id',
95 'terms' => $data[ $object->name . '_default_terms' ],
96 ];
97 }
98 } else {
99 $setting_key = $object->name . '_ids';
100
101 if ( ! empty( $data[ $setting_key ] ) ) {
102 $args['tax_query'][] = [
103 'taxonomy' => $object->name,
104 'field' => 'term_id',
105 'terms' => $data[ $setting_key ],
106 ];
107 }
108 }
109 }
110
111 if ( ! empty( $args['tax_query'] ) && $data['relation'] ) {
112 $args['tax_query']['relation'] = $data['relation'];
113 }
114
115 if ( $data['post_keyword'] ) {
116 $args['s'] = $data['post_keyword'];
117 }
118
119 if ( $prefix !== 'slider' ) {
120 if ( $data['post_limit'] ) {
121 if ( 'show' !== $data['show_pagination'] ) {
122 $args['posts_per_page'] = $data['post_limit'];
123 } else {
124 $tempArgs = $args;
125 $tempArgs['posts_per_page'] = $data['post_limit'];
126 $tempArgs['paged'] = 1;
127 $tempArgs['fields'] = 'ids';
128 $tempQ = new WP_Query( $tempArgs );
129 if ( ! empty( $tempQ->posts ) ) {
130 $args['post__in'] = $tempQ->posts;
131 $args['posts_per_page'] = $data['post_limit'];
132 }
133 }
134 } else {
135 $_posts_per_page = 9;
136
137 if ( 'grid' === $prefix ) {
138 if ( $data['grid_layout'] == 'grid-layout5' ) {
139 $_posts_per_page = 5;
140 } elseif ( in_array( $data['grid_layout'], [ 'grid-layout6', 'grid-layout6-2' ] ) ) {
141 $_posts_per_page = 3;
142 } elseif ( in_array( $data['grid_layout'], [ 'grid-layout5', 'grid-layout5-2' ] ) ) {
143 $_posts_per_page = 5;
144 }
145 } elseif ( 'list' === $prefix ) {
146 if ( in_array( $data['list_layout'], [ 'list-layout2', 'list-layout2-2' ] ) ) {
147 $_posts_per_page = 9;
148 } elseif ( in_array( $data['list_layout'], [ 'list-layout3', 'list-layout3-2' ] ) ) {
149 $_posts_per_page = 5;
150 }
151 } elseif ( 'grid_hover' === $prefix ) {
152 if ( in_array( $data['grid_hover_layout'], [ 'grid_hover-layout4', 'grid_hover-layout4-2' ] ) ) {
153 $_posts_per_page = 7;
154 } elseif ( in_array( $data['grid_hover_layout'], [ 'grid_hover-layout5', 'grid_hover-layout5-2' ] ) ) {
155 $_posts_per_page = 3;
156 } elseif ( in_array(
157 $data['grid_hover_layout'],
158 [ 'grid_hover-layout6', 'grid_hover-layout6-2', 'grid_hover-layout9', 'grid_hover-layout9-2', 'grid_hover-layout10', 'grid_hover-layout11' ]
159 )
160 ) {
161 $_posts_per_page = 4;
162 } elseif ( in_array( $data['grid_hover_layout'], [ 'grid_hover-layout7', 'grid_hover-layout7-2', 'grid_hover-layout8' ] ) ) {
163 $_posts_per_page = 5;
164 } elseif ( in_array( $data['grid_hover_layout'], [ 'grid_hover-layout6', 'grid_hover-layout6-2' ] ) ) {
165 $_posts_per_page = 4;
166 }
167 }
168
169 $args['posts_per_page'] = $_posts_per_page;
170 }
171
172 if ( 'show' === $data['show_pagination'] && $data['display_per_page'] ) {
173 $args['posts_per_page'] = $data['display_per_page'];
174 }
175 } else {
176 $slider_per_page = $data['post_limit'];
177
178 if ( $data['slider_layout'] == 'slider-layout10' ) {
179 $slider_reminder = ( intval( $data['post_limit'], 10 ) % 5 );
180 if ( $slider_reminder ) {
181 $slider_per_page = ( $data['post_limit'] - $slider_reminder + 5 );
182 }
183 }
184
185 $args['posts_per_page'] = $slider_per_page;
186 }
187
188 if ( $data['exclude'] || $data['offset'] ) {
189 $excluded_ids = [];
190
191 if ( $data['exclude'] ) {
192 $excluded_ids = explode( ',', $data['exclude'] );
193 $excluded_ids = array_map( 'trim', $excluded_ids );
194 }
195
196 $offset_posts = [];
197
198 if ( $data['offset'] ) {
199 $_temp_args = $args;
200 unset( $_temp_args['paged'] );
201 $_temp_args['posts_per_page'] = $data['offset'];
202 $_temp_args['fields'] = 'ids';
203
204 $offset_posts = get_posts( $_temp_args );
205 }
206
207 $excluded_post_ids = array_merge( $offset_posts, $excluded_ids );
208 $args['post__not_in'] = array_unique( $excluded_post_ids );
209 }
210
211 return $args;
212 }
213
214
215 /**
216 * Post Query for page builder block
217 *
218 * @param $data
219 * @param string $prefix
220 * @param string $template_type
221 *
222 * @return array
223 */
224 public static function post_query_builder( $data, $prefix = '', $template_type = '' ): array {
225 if ( 'single' === $template_type ) {
226 $rt_post_cat = wp_get_object_terms( $data['last_post_id'], $data['taxonomy_lists'], [ 'fields' => 'ids' ] );
227 $args = [
228 'post_type' => 'post',
229 'post_status' => 'publish',
230 'tax_query' => [
231 [
232 'taxonomy' => $data['taxonomy_lists'],
233 'field' => 'id',
234 'terms' => $rt_post_cat,
235 ],
236 ],
237 'post__not_in' => [ $data['last_post_id'] ],
238 ];
239
240 if ( $orderby = $data['orderby'] ) {
241 $args['orderby'] = $orderby;
242 }
243
244 if ( $data['order'] ) {
245 $args['order'] = $data['order'];
246 }
247
248 $slider_per_page = $data['post_limit'];
249
250 if ( $data['slider_layout'] == 'slider-layout10' ) {
251 $slider_reminder = ( intval( $data['post_limit'], 10 ) % 5 );
252
253 if ( $slider_reminder ) {
254 $slider_per_page = ( $data['post_limit'] - $slider_reminder + 5 );
255 }
256 }
257
258 $args['posts_per_page'] = $slider_per_page;
259 } else {
260 $args = [
261 'post_type' => 'post',
262 'post_status' => 'publish',
263 'posts_per_page' => $data['post_limit'],
264 ];
265
266 $excluded_ids = null;
267
268 if ( $data['exclude'] || $data['offset'] ) {
269 $excluded_ids = [];
270
271 if ( $data['exclude'] ) {
272 $excluded_ids = explode( ',', $data['exclude'] );
273 $excluded_ids = array_map( 'trim', $excluded_ids );
274 }
275
276 $offset_posts = [];
277
278 if ( $data['offset'] ) {
279 $_temp_args = [
280 'post_type' => 'post',
281 'posts_per_page' => $data['offset'],
282 'post_status' => 'publish',
283 'fields' => 'ids',
284 ];
285
286 if ( is_tag() ) {
287 $_temp_args['tag'] = get_query_var( 'tag' );
288 }
289
290 if ( is_category() ) {
291 $_temp_args['cat'] = get_query_var( 'cat' );
292 }
293
294 if ( is_author() ) {
295 $_temp_args['author'] = get_query_var( 'author' );
296 }
297
298 if ( is_date() ) {
299 $year = get_query_var( 'year' );
300 $monthnum = get_query_var( 'monthnum' );
301 $day = get_query_var( 'day' );
302
303 $_temp_args = [
304 'date_query' => [
305 [
306 'year' => $year,
307 'month' => $monthnum,
308 'day' => $day,
309 ],
310 ],
311 ];
312 }
313
314 $offset_posts = get_posts( $_temp_args );
315 }
316
317 $excluded_post_ids = array_merge( $offset_posts, $excluded_ids );
318 $args['post__not_in'] = array_unique( $excluded_post_ids );
319 }
320
321 if ( $data['post_id'] ) {
322 $post_ids = explode( ',', $data['post_id'] );
323 $post_ids = array_map( 'trim', $post_ids );
324
325 $args['post__in'] = $post_ids;
326
327 if ( $excluded_ids != null && is_array( $excluded_ids ) ) {
328 $args['post__in'] = array_diff( $post_ids, $excluded_ids );
329 }
330 }
331
332 if ( 'slider' !== $prefix && 'show' === $data['show_pagination'] ) {
333 $args['paged'] = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
334 }
335
336 if ( is_tag() ) {
337 $args['tag'] = get_query_var( 'tag' );
338 }
339
340 if ( is_category() ) {
341 $args['cat'] = get_query_var( 'cat' );
342 }
343
344 if ( is_author() ) {
345 $args['author'] = get_query_var( 'author' );
346 }
347
348 if ( is_date() ) {
349 $year = get_query_var( 'year' );
350 $monthnum = get_query_var( 'monthnum' );
351 $day = get_query_var( 'day' );
352
353 $args = [
354 'date_query' => [
355 [
356 'year' => $year,
357 'month' => $monthnum,
358 'day' => $day,
359 ],
360 ],
361 ];
362 }
363
364 if ( is_search() ) {
365 $search = get_query_var( 's' );
366 $args['s'] = $search;
367 }
368 }
369
370 return $args;
371 }
372 }
373