PluginProbe
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder / 1.6.4
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder v1.6.4
3.1.4 3.0.8 3.0.9 3.1.0 3.1.2 3.1.3 3.0.7 3.0.5 3.0.4 3.0.3 3.0.2 trunk 1.5.0 1.5.1 1.5.2 1.6.1 1.6.2 1.6.3 1.6.4 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 All 93 releases
ultimate-store-kit / includes / controls / group-query / group-control-query.php

group-control-query.php in Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder 1.6.4, at includes/controls/group-query/group-control-query.php

739 lines 20.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace UltimateStoreKit\Includes\Controls\GroupQuery;
4
5 use Elementor\Controls_Manager;
6 use UltimateStoreKit\Includes\Controls\SelectInput\Dynamic_Select;
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit; // Exit if accessed directly.
10 }
11
12 trait Group_Control_Query {
13
14 public function register_query_builder_controls() {
15
16 $this->add_control(
17 'product_source',
18 [
19 'label' => __( 'Source', 'ultimate-store-kit' ),
20 'type' => Controls_Manager::SELECT,
21 'options' => $this->getGroupControlQueryPostTypes(),
22 'default' => 'product',
23 ]
24 );
25 $this->add_control(
26 'product_limit',
27 [
28 'label' => esc_html__( 'Product Limit', 'ultimate-store-kit' ),
29 'type' => Controls_Manager::NUMBER,
30 'default' => 9,
31 ]
32 );
33
34 $this->add_control(
35 'product_selected_ids',
36 [
37 'label' => __( 'Search & Select', 'ultimate-store-kit' ),
38 'type' => Dynamic_Select::TYPE,
39 'multiple' => true,
40 'label_block' => true,
41 'query_args' => [
42 'query' => 'posts',
43 ],
44 'condition' => [
45 'product_source' => 'manual_selection',
46 ]
47 ]
48 );
49
50 $this->start_controls_tabs(
51 'tabs_product_include_exclude',
52 [
53 'condition' => [
54 'product_source!' => [ 'manual_selection', 'current_query' ],
55 ]
56 ]
57 );
58
59 $this->start_controls_tab(
60 'tab_product_include',
61 [
62 'label' => __( 'Include', 'ultimate-store-kit' ),
63 'condition' => [
64 'product_source!' => [ 'manual_selection', 'current_query' ],
65 ]
66 ]
67 );
68
69 $this->add_control(
70 'product_include_by',
71 [
72 'label' => __( 'Include By', 'ultimate-store-kit' ),
73 'type' => Controls_Manager::SELECT2,
74 'multiple' => true,
75 'label_block' => true,
76 'options' => [
77 'authors' => __( 'Authors', 'ultimate-store-kit' ),
78 'terms' => __( 'Terms', 'ultimate-store-kit' ),
79 ],
80 'condition' => [
81 'product_source!' => [ 'manual_selection', 'current_query' ],
82 ]
83 ]
84 );
85
86 $this->add_control(
87 'product_include_author_ids',
88 [
89 'label' => __( 'Authors', 'ultimate-store-kit' ),
90 'type' => Dynamic_Select::TYPE,
91 'multiple' => true,
92 'label_block' => true,
93 'query_args' => [
94 'query' => 'authors',
95 ],
96 'condition' => [
97 'product_include_by' => 'authors',
98 'product_source!' => [ 'manual_selection', 'current_query' ],
99 ]
100 ]
101 );
102
103 $this->add_control(
104 'product_include_term_ids',
105 [
106 'label' => __( 'Terms', 'ultimate-store-kit' ),
107 'description' => __( 'Terms are items in a taxonomy. The available taxonomies are: Categories, Tags, Formats and custom taxonomies.', 'ultimate-store-kit' ),
108 'type' => Dynamic_Select::TYPE,
109 'multiple' => true,
110 'label_block' => true,
111 'placeholder' => __( 'Type and select terms', 'ultimate-store-kit' ),
112 'query_args' => [
113 'query' => 'terms',
114 'widget_props' => [
115 'post_type' => 'product_source'
116 ]
117 ],
118 'condition' => [
119 'product_include_by' => 'terms',
120 'product_source!' => [ 'manual_selection', 'current_query', '_related_post_type' ],
121 ]
122 ]
123 );
124
125 $this->end_controls_tab();
126
127 $this->start_controls_tab(
128 'tab_product_exclude',
129 [
130 'label' => __( 'Exclude', 'ultimate-store-kit' ),
131 'condition' => [
132 'product_source!' => [ 'manual_selection', 'current_query' ],
133 ]
134 ]
135 );
136
137 $this->add_control(
138 'product_exclude_by',
139 [
140 'label' => __( 'Exclude By', 'ultimate-store-kit' ),
141 'type' => Controls_Manager::SELECT2,
142 'multiple' => true,
143 'label_block' => true,
144 'options' => [
145 'authors' => __( 'Authors', 'ultimate-store-kit' ),
146 'current_post' => __( 'Current Post', 'ultimate-store-kit' ),
147 'manual_selection' => __( 'Manual Selection', 'ultimate-store-kit' ),
148 'terms' => __( 'Terms', 'ultimate-store-kit' ),
149 ],
150 'condition' => [
151 'product_source!' => [ 'manual_selection', 'current_query' ],
152 ]
153 ]
154 );
155
156 $this->add_control(
157 'posts_exclude_ids',
158 [
159 'label' => __( 'Search & Select', 'ultimate-store-kit' ),
160 'type' => Dynamic_Select::TYPE,
161 'multiple' => true,
162 'label_block' => true,
163 'query_args' => [
164 'query' => 'posts',
165 'widget_props' => [
166 'post_type' => 'product_source'
167 ]
168 ],
169 'condition' => [
170 'product_source!' => [ 'manual_selection', 'current_query' ],
171 'product_exclude_by' => 'manual_selection',
172 ]
173 ]
174 );
175
176 $this->add_control(
177 'product_exclude_author_ids',
178 [
179 'label' => __( 'Authors', 'ultimate-store-kit' ),
180 'type' => Dynamic_Select::TYPE,
181 'multiple' => true,
182 'label_block' => true,
183 'query_args' => [
184 'query' => 'authors',
185 ],
186 'condition' => [
187 'product_exclude_by' => 'authors',
188 'product_source!' => [ 'manual_selection', 'current_query' ],
189 ]
190 ]
191 );
192
193 $this->add_control(
194 'product_exclude_term_ids',
195 [
196 'label' => __( 'Terms', 'ultimate-store-kit' ),
197 'description' => __( 'Terms are items in a taxonomy. The available taxonomies are: Categories, Tags, Formats and custom taxonomies.', 'ultimate-store-kit' ),
198 'type' => Dynamic_Select::TYPE,
199 'multiple' => true,
200 'label_block' => true,
201 'placeholder' => __( 'Type and select terms', 'ultimate-store-kit' ),
202 'query_args' => [
203 'query' => 'terms',
204 'widget_props' => [
205 'post_type' => 'product_source'
206 ]
207 ],
208 'condition' => [
209 'product_exclude_by' => 'terms',
210 'product_source!' => [ 'manual_selection', 'current_query', '_related_post_type' ],
211 ]
212 ]
213 );
214
215 $this->end_controls_tab();
216 $this->end_controls_tabs();
217
218 $this->add_control(
219 'product_divider',
220 [
221 'type' => Controls_Manager::DIVIDER,
222 'condition' => [
223 'product_source!' => 'current_query',
224 ]
225 ]
226 );
227 $this->add_control(
228 'product_select_date',
229 [
230 'label' => __( 'Date', 'ultimate-store-kit' ),
231 'type' => Controls_Manager::SELECT,
232 'default' => 'anytime',
233 'options' => [
234 'anytime' => __( 'All', 'ultimate-store-kit' ),
235 'today' => __( 'Past Day', 'ultimate-store-kit' ),
236 'week' => __( 'Past Week', 'ultimate-store-kit' ),
237 'month' => __( 'Past Month', 'ultimate-store-kit' ),
238 'quarter' => __( 'Past Quarter', 'ultimate-store-kit' ),
239 'year' => __( 'Past Year', 'ultimate-store-kit' ),
240 'exact' => __( 'Custom', 'ultimate-store-kit' ),
241 ],
242 'condition' => [
243 'product_source!' => 'current_query',
244 ]
245 ]
246 );
247
248 $this->add_control(
249 'product_date_before',
250 [
251 'label' => __( 'Before', 'ultimate-store-kit' ),
252 'type' => Controls_Manager::DATE_TIME,
253 'description' => __( 'Setting a ‘Before’ date will show all the posts published until the chosen date (inclusive).', 'ultimate-store-kit' ),
254 'condition' => [
255 'product_select_date' => 'exact',
256 'product_source!' => 'current_query',
257 ]
258 ]
259 );
260
261 $this->add_control(
262 'product_date_after',
263 [
264 'label' => __( 'After', 'ultimate-store-kit' ),
265 'type' => Controls_Manager::DATE_TIME,
266 'description' => __( 'Setting an ‘After’ date will show all the posts published since the chosen date (inclusive).', 'ultimate-store-kit' ),
267 'condition' => [
268 'product_select_date' => 'exact',
269 'product_source!' => 'current_query',
270 ]
271 ]
272 );
273
274 $this->add_control(
275 'product_orderby',
276 [
277 'label' => __( 'Order By', 'ultimate-store-kit' ),
278 'type' => Controls_Manager::SELECT,
279 'default' => 'date',
280 'options' => [
281 'title' => __( 'Title', 'ultimate-store-kit' ),
282 'ID' => __( 'ID', 'ultimate-store-kit' ),
283 'date' => __( 'Date', 'ultimate-store-kit' ),
284 'author' => __( 'Author', 'ultimate-store-kit' ),
285 'comment_count' => __( 'Comment Count', 'ultimate-store-kit' ),
286 'menu_order' => __( 'Menu Order', 'ultimate-store-kit' ),
287 'rand' => __( 'Random', 'ultimate-store-kit' ),
288 'price' => __( 'Price', 'ultimate-store-kit' ),
289 'sales' => __( 'Sales', 'ultimate-store-kit' ),
290 ]
291 ]
292 );
293 $this->add_control(
294 'product_order',
295 [
296 'label' => __( 'Order', 'ultimate-store-kit' ),
297 'type' => Controls_Manager::SELECT,
298 'default' => 'desc',
299 'options' => [
300 'asc' => __( 'ASC', 'ultimate-store-kit' ),
301 'desc' => __( 'DESC', 'ultimate-store-kit' ),
302 ],
303 'condition' => [
304 'product_source!' => 'current_query',
305 ]
306 ]
307 );
308 // Others Features
309 }
310
311 public function register_controls_wc_additional() {
312 $this->add_control(
313 'product_show_only',
314 [
315 'label' => esc_html__( 'Show Product', 'ultimate-store-kit' ),
316 'type' => Controls_Manager::SELECT,
317 'default' => 'all',
318 'options' => [
319 'all' => esc_html__( 'All Products', 'ultimate-store-kit' ),
320 'onsale' => esc_html__( 'On Sale', 'ultimate-store-kit' ),
321 'featured' => esc_html__( 'Featured', 'ultimate-store-kit' ),
322 ]
323 ]
324 );
325 $this->add_control(
326 'product_hide_free',
327 [
328 'label' => esc_html__( 'Hide Free Product', 'ultimate-store-kit' ),
329 'type' => Controls_Manager::SWITCHER,
330
331 ]
332 );
333 $this->add_control(
334 'product_hide_out_stock',
335 [
336 'label' => esc_html__( 'Hide Out of Stock', 'ultimate-store-kit' ),
337 'type' => Controls_Manager::SWITCHER,
338 ]
339 );
340 $this->add_control(
341 'product_only_with_featured_image',
342 [
343 'label' => __( 'Only Featured Image Post', 'ultimate-store-kit' ),
344 'description' => __( 'Enable to display posts only when featured image is present.', 'ultimate-store-kit' ),
345 'type' => Controls_Manager::SWITCHER,
346 'return_value' => 'yes',
347 'condition' => [
348 'product_source!' => 'current_query',
349 ]
350 ]
351 );
352 $this->add_control(
353 'query_id',
354 [
355 'label' => __( 'Query ID', 'ultimate-store-kit' ),
356 'description' => __( 'Give your Query a custom unique id to allow server side filtering', 'ultimate-store-kit' ),
357 'type' => Controls_Manager::TEXT,
358 'separator' => 'before',
359 ]
360 );
361 }
362
363 private function setMetaQueryArgs() {
364
365 $args = [];
366
367 if ( 'current_query' === $this->getGroupControlQueryPostType() ) {
368 return [];
369 }
370 $args['paged'] = max( 1, get_query_var( 'paged' ), get_query_var( 'page' ) );
371 $args['posts_per_page'] = $this->get_settings( 'product_limit' );
372 $args['order'] = $this->get_settings( 'product_order' );
373 // $args['orderby'] = $this->get_settings('product_orderby');
374
375 if ( 'product' === $this->getGroupControlQueryPostType() ) {
376 $product_visibility_term_ids = wc_get_product_visibility_term_ids();
377 if ( 'yes' == $this->get_settings( 'product_hide_free' ) ) {
378 $args['meta_query'][] = [
379 'key' => '_price',
380 'value' => 0,
381 'compare' => '>',
382 'type' => 'DECIMAL',
383 ];
384 }
385
386 if ( 'yes' == $this->get_settings( 'product_hide_out_stock' ) ) {
387 $args['tax_query'][] = [
388 [
389 'taxonomy' => 'product_visibility',
390 'field' => 'term_taxonomy_id',
391 'terms' => $product_visibility_term_ids['outofstock'],
392 'operator' => 'NOT IN',
393 ],
394 ]; // WPCS: slow query ok.
395 }
396 switch ( $this->get_settings( 'product_show_only' ) ) {
397 case 'featured':
398 $args['tax_query'][] = [
399 'taxonomy' => 'product_visibility',
400 'field' => 'term_taxonomy_id',
401 'terms' => $product_visibility_term_ids['featured'],
402 ];
403 break;
404 case 'onsale':
405 $product_ids_on_sale = wc_get_product_ids_on_sale();
406 $product_ids_on_sale[] = 0;
407 $args['post__in'] = $product_ids_on_sale;
408 break;
409 }
410 switch ( $this->get_settings( 'product_orderby' ) ) {
411 case 'price':
412 $args['meta_key'] = '_price'; // WPCS: slow query ok.
413 $args['orderby'] = 'meta_value_num';
414 break;
415 case 'sales':
416 $args['meta_key'] = 'total_sales'; // WPCS: slow query ok.
417 $args['orderby'] = 'meta_value_num';
418 break;
419 default:
420 $args['orderby'] = $this->get_settings( 'product_orderby' );
421 }
422 }
423
424
425
426 /**
427 * Set Feature Images
428 */
429 if ( $this->get_settings( 'product_only_with_featured_image' ) === 'yes' ) {
430 $args['meta_key'] = '_thumbnail_id';
431 }
432
433 /**
434 * Set Date
435 */
436
437 $selected_date = $this->get_settings( 'product_select_date' );
438
439 if ( ! empty( $selected_date ) ) {
440 $date_query = [];
441
442 switch ( $selected_date ) {
443 case 'today':
444 $date_query['after'] = '-1 day';
445 break;
446
447 case 'week':
448 $date_query['after'] = '-1 week';
449 break;
450
451 case 'month':
452 $date_query['after'] = '-1 month';
453 break;
454
455 case 'quarter':
456 $date_query['after'] = '-3 month';
457 break;
458
459 case 'year':
460 $date_query['after'] = '-1 year';
461 break;
462
463 case 'exact':
464 $after_date = $this->get_settings( 'product_date_after' );
465 if ( ! empty( $after_date ) ) {
466 $date_query['after'] = $after_date;
467 }
468
469 $before_date = $this->get_settings( 'product_date_before' );
470 if ( ! empty( $before_date ) ) {
471 $date_query['before'] = $before_date;
472 }
473
474 $date_query['inclusive'] = true;
475 break;
476 }
477
478 if ( ! empty( $date_query ) ) {
479 $args['date_query'] = $date_query;
480 }
481 }
482
483 return $args;
484 }
485
486 protected function getGroupControlQueryArgs() {
487
488 $settings = $this->get_settings();
489 $args = $this->setMetaQueryArgs();
490 $args['post_status'] = 'publish';
491 $args['suppress_filters'] = false;
492 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
493
494 // /**
495 // * Set Ignore Sticky
496 // */
497 // if (
498 // $this->getGroupControlQueryPostType() === 'post'
499 // && $this->get_settings('posts_ignore_sticky_posts') === 'yes'
500 // ) {
501 // $args['ignore_sticky_posts'] = true;
502
503 // if (in_array('current_post', $exclude_by)) {
504 // $args['post__not_in'] = [get_the_ID()];
505 // }
506 // }
507
508
509 if ( $this->getGroupControlQueryPostType() === 'manual_selection' ) {
510 /**
511 * Set Including Manually
512 */
513 $selected_ids = $this->get_settings( 'product_selected_ids' );
514 $selected_ids = wp_parse_id_list( $selected_ids );
515 $args['post_type'] = 'product';
516 if ( ! empty( $selected_ids ) ) {
517 $args['post__in'] = $selected_ids;
518 }
519 $args['ignore_sticky_posts'] = 1;
520 } elseif ( 'current_query' === $this->getGroupControlQueryPostType() ) {
521 /**
522 * Make Current Query
523 */
524 $wp_query = $GLOBALS['wp_query']->query_vars;
525
526 if ( isset( $wp_query['usk-template-builder'] ) && 'shop-page' === $wp_query['usk-template-builder'] || isset($_GET['usk-template']) ) {
527 $args['post_type'] = 'product';
528 }else{
529 $args = $wp_query;
530 }
531
532 $args['paged'] = 1;
533 $args = apply_filters( 'ultimate_store_kit/query/get_query_args/current_query', $args );
534
535 } elseif ( '_related_post_type' === $this->getGroupControlQueryPostType() ) {
536 /**
537 * Set Related Query
538 */
539 $post_id = get_queried_object_id();
540 $related_post_id = is_singular() && ( 0 !== $post_id ) ? $post_id : null;
541 $args['post_type'] = get_post_type( $related_post_id );
542
543 $include_by = $this->getGroupControlQueryParamBy( 'include' );
544 if ( in_array( 'authors', $include_by ) ) {
545 $args['author__in'] = wp_parse_id_list( $settings['product_include_author_ids'] );
546 } else {
547 $args['author__in'] = get_post_field( 'post_author', $related_post_id );
548 }
549
550 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
551 if ( in_array( 'authors', $exclude_by ) ) {
552 $args['author__not_in'] = wp_parse_id_list( $settings['product_exclude_author_ids'] );
553 }
554
555 if ( in_array( 'current_post', $exclude_by ) ) {
556 $args['post__not_in'] = [ get_the_ID() ];
557 }
558
559 $args['ignore_sticky_posts'] = 1;
560 $args = apply_filters( 'ultimate_store_kit/query/get_query_args/related_query', $args );
561 } else {
562
563 /**
564 * Set Post Type
565 */
566 $args['post_type'] = $this->getGroupControlQueryPostType();
567
568 /**
569 * Set Exclude Post
570 */
571 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
572 $current_post = [];
573
574 if ( in_array( 'current_post', $exclude_by ) && is_singular() ) {
575 $current_post = [ get_the_ID() ];
576 }
577
578 if ( in_array( 'manual_selection', $exclude_by ) ) {
579 $exclude_ids = $settings['posts_exclude_ids'];
580 $args['post__not_in'] = array_merge( $current_post, wp_parse_id_list( $exclude_ids ) );
581 }
582 /**
583 * Set Authors
584 */
585 $include_by = $this->getGroupControlQueryParamBy( 'include' );
586 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
587 $include_users = [];
588 $exclude_users = [];
589
590 if ( in_array( 'authors', $include_by ) ) {
591 $include_users = wp_parse_id_list( $settings['product_include_author_ids'] );
592 }
593
594 if ( in_array( 'authors', $exclude_by ) ) {
595 $exclude_users = wp_parse_id_list( $settings['product_exclude_author_ids'] );
596 $include_users = array_diff( $include_users, $exclude_users );
597 }
598
599 if ( ! empty( $include_users ) ) {
600 $args['author__in'] = $include_users;
601 }
602
603 if ( ! empty( $exclude_users ) ) {
604 $args['author__not_in'] = $exclude_users;
605 ;
606 }
607
608 /**
609 * Set Taxonomy
610 */
611 $include_by = $this->getGroupControlQueryParamBy( 'include' );
612 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
613 $include_terms = [];
614 $exclude_terms = [];
615 $terms_query = [];
616
617 if ( in_array( 'terms', $include_by ) ) {
618 $include_terms = wp_parse_id_list( $settings['product_include_term_ids'] );
619 }
620
621 if ( in_array( 'terms', $exclude_by ) ) {
622 $exclude_terms = wp_parse_id_list( $settings['product_exclude_term_ids'] );
623 $include_terms = array_diff( $include_terms, $exclude_terms );
624 }
625
626 if ( ! empty( $include_terms ) ) {
627 $tax_terms_map = $this->mapGroupControlQuery( $include_terms );
628
629 foreach ( $tax_terms_map as $tax => $terms ) {
630 $terms_query[] = [
631 'taxonomy' => $tax,
632 'field' => 'term_id',
633 'terms' => $terms,
634 'operator' => 'IN',
635 ];
636 }
637 }
638
639 if ( ! empty( $exclude_terms ) ) {
640 $tax_terms_map = $this->mapGroupControlQuery( $exclude_terms );
641
642 foreach ( $tax_terms_map as $tax => $terms ) {
643 $terms_query[] = [
644 'taxonomy' => $tax,
645 'field' => 'term_id',
646 'terms' => $terms,
647 'operator' => 'NOT IN',
648 ];
649 }
650 }
651
652 if ( ! empty( $terms_query ) ) {
653 $args['tax_query'] = $terms_query;
654 $args['tax_query']['relation'] = 'AND';
655 }
656 }
657
658 $query_id = $this->get_settings( 'query_id' );
659 if ( ! empty( $query_id ) ) {
660 add_action( 'pre_get_posts', [ $this, 'pre_get_posts_query_filter' ] );
661 }
662
663 return $args;
664 }
665
666
667 /**
668 * @return mixed
669 */
670 private function getGroupControlQueryPostType() {
671 return $this->get_settings( 'product_source' );
672 }
673
674 /**
675 * Get Query Params by args
676 *
677 * @param string $by
678 *
679 * @return array|mixed
680 */
681 private function getGroupControlQueryParamBy( $by = 'exclude' ) {
682 $mapBy = [
683 'exclude' => 'product_exclude_by',
684 'include' => 'product_include_by',
685 ];
686
687 $setting = $this->get_settings( $mapBy[ $by ] );
688
689 return ( ! empty( $setting ) ? $setting : [] );
690 }
691
692 /**
693 * @param array $term_ids
694 *
695 * @return array
696 */
697 private function mapGroupControlQuery( $term_ids = [] ) {
698 $terms = get_terms(
699 [
700 'term_taxonomy_id' => $term_ids,
701 'hide_empty' => false,
702 ]
703 );
704
705 $tax_terms_map = [];
706
707 foreach ( $terms as $term ) {
708 $taxonomy = $term->taxonomy;
709 $tax_terms_map[ $taxonomy ][] = $term->term_id;
710 }
711
712 return $tax_terms_map;
713 }
714
715 /**
716 * @return array|string[]|\WP_Post_Type[]
717 */
718 private function getGroupControlQueryPostTypes() {
719
720 $post_types = [
721 'product' => __( 'Product', 'ultimate-store-kit' ),
722 'manual_selection' => __( 'Manual Selection', 'ultimate-store-kit' ),
723 'current_query' => __( 'Current Query', 'ultimate-store-kit' ),
724 '_related_post_type' => __( 'Related', 'ultimate-store-kit' ),
725 ];
726
727 // $post_types = array_merge($post_types, $extra_types);
728
729 return $post_types;
730 }
731
732 public function pre_get_posts_query_filter( $wp_query ) {
733 if ( $this ) {
734 $query_id = $this->get_settings( 'query_id' );
735 do_action( "ultimate_store_kit/query/{$query_id}", $wp_query, $this );
736 }
737 }
738 }
739