PluginProbe
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder / 2.0.1
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder v2.0.1
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 2.0.1, at includes/controls/group-query/group-control-query.php

753 lines 20.8 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 'modified' => __( 'Modified', 'ultimate-store-kit' ),
288 'rand' => __( 'Random', 'ultimate-store-kit' ),
289 'price' => __( 'Price', 'ultimate-store-kit' ),
290 'sales' => __( 'Sales', 'ultimate-store-kit' ),
291 ]
292 ]
293 );
294 $this->add_control(
295 'product_order',
296 [
297 'label' => __( 'Order', 'ultimate-store-kit' ),
298 'type' => Controls_Manager::SELECT,
299 'default' => 'desc',
300 'options' => [
301 'asc' => __( 'ASC', 'ultimate-store-kit' ),
302 'desc' => __( 'DESC', 'ultimate-store-kit' ),
303 ],
304 'condition' => [
305 'product_source!' => 'current_query',
306 ]
307 ]
308 );
309 // Others Features
310 }
311
312 public function register_controls_wc_additional() {
313 $this->add_control(
314 'product_show_only',
315 [
316 'label' => esc_html__( 'Show Product', 'ultimate-store-kit' ),
317 'type' => Controls_Manager::SELECT,
318 'default' => 'all',
319 'options' => [
320 'all' => esc_html__( 'All Products', 'ultimate-store-kit' ),
321 'onsale' => esc_html__( 'On Sale', 'ultimate-store-kit' ),
322 'featured' => esc_html__( 'Featured', 'ultimate-store-kit' ),
323 ]
324 ]
325 );
326 $this->add_control(
327 'product_hide_free',
328 [
329 'label' => esc_html__( 'Hide Free Product', 'ultimate-store-kit' ),
330 'type' => Controls_Manager::SWITCHER,
331
332 ]
333 );
334 $this->add_control(
335 'product_hide_out_stock',
336 [
337 'label' => esc_html__( 'Hide Out of Stock', 'ultimate-store-kit' ),
338 'type' => Controls_Manager::SWITCHER,
339 ]
340 );
341 $this->add_control(
342 'product_only_with_featured_image',
343 [
344 'label' => __( 'Only Featured Image Post', 'ultimate-store-kit' ),
345 'description' => __( 'Enable to display posts only when featured image is present.', 'ultimate-store-kit' ),
346 'type' => Controls_Manager::SWITCHER,
347 'return_value' => 'yes',
348 'condition' => [
349 'product_source!' => 'current_query',
350 ]
351 ]
352 );
353 $this->add_control(
354 'query_id',
355 [
356 'label' => __( 'Query ID', 'ultimate-store-kit' ),
357 'description' => __( 'Give your Query a custom unique id to allow server side filtering', 'ultimate-store-kit' ),
358 'type' => Controls_Manager::TEXT,
359 'separator' => 'before',
360 ]
361 );
362 }
363
364 private function setMetaQueryArgs() {
365
366 $args = [];
367
368 if ( 'current_query' === $this->getGroupControlQueryPostType() ) {
369 $args['posts_per_page'] = $this->get_settings( 'product_limit' );
370 return $args;
371 }
372
373 $args['paged'] = max( 1, get_query_var( 'paged' ), get_query_var( 'page' ) );
374 $args['posts_per_page'] = $this->get_settings( 'product_limit' );
375 $args['order'] = $this->get_settings( 'product_order' );
376 // $args['orderby'] = $this->get_settings('product_orderby');
377
378 if ( 'product' === $this->getGroupControlQueryPostType() ) {
379 $product_visibility_term_ids = wc_get_product_visibility_term_ids();
380 if ( 'yes' == $this->get_settings( 'product_hide_free' ) ) {
381 $args['meta_query'][] = [
382 'key' => '_price',
383 'value' => 0,
384 'compare' => '>',
385 'type' => 'DECIMAL',
386 ];
387 }
388
389 if ( 'yes' == $this->get_settings( 'product_hide_out_stock' ) ) {
390 $args['tax_query'][] = [
391 [
392 'taxonomy' => 'product_visibility',
393 'field' => 'term_taxonomy_id',
394 'terms' => $product_visibility_term_ids['outofstock'],
395 'operator' => 'NOT IN',
396 ],
397 ]; // WPCS: slow query ok.
398 }
399 switch ( $this->get_settings( 'product_show_only' ) ) {
400 case 'featured':
401 $args['tax_query'][] = [
402 'taxonomy' => 'product_visibility',
403 'field' => 'term_taxonomy_id',
404 'terms' => $product_visibility_term_ids['featured'],
405 ];
406 break;
407 case 'onsale':
408 $product_ids_on_sale = wc_get_product_ids_on_sale();
409 $product_ids_on_sale[] = 0;
410 $args['post__in'] = $product_ids_on_sale;
411 break;
412 }
413 switch ( $this->get_settings( 'product_orderby' ) ) {
414 case 'price':
415 $args['meta_key'] = '_price'; // WPCS: slow query ok.
416 $args['orderby'] = 'meta_value_num';
417 break;
418 case 'sales':
419 $args['meta_key'] = 'total_sales'; // WPCS: slow query ok.
420 $args['orderby'] = 'meta_value_num';
421 break;
422 default:
423 $args['orderby'] = $this->get_settings( 'product_orderby' );
424 }
425 }
426
427
428
429 /**
430 * Set Feature Images
431 */
432 if ( $this->get_settings( 'product_only_with_featured_image' ) === 'yes' ) {
433 $args['meta_key'] = '_thumbnail_id';
434 }
435
436 /**
437 * Set Date
438 */
439
440 $selected_date = $this->get_settings( 'product_select_date' );
441
442 if ( ! empty( $selected_date ) ) {
443 $date_query = [];
444
445 switch ( $selected_date ) {
446 case 'today':
447 $date_query['after'] = '-1 day';
448 break;
449
450 case 'week':
451 $date_query['after'] = '-1 week';
452 break;
453
454 case 'month':
455 $date_query['after'] = '-1 month';
456 break;
457
458 case 'quarter':
459 $date_query['after'] = '-3 month';
460 break;
461
462 case 'year':
463 $date_query['after'] = '-1 year';
464 break;
465
466 case 'exact':
467 $after_date = $this->get_settings( 'product_date_after' );
468 if ( ! empty( $after_date ) ) {
469 $date_query['after'] = $after_date;
470 }
471
472 $before_date = $this->get_settings( 'product_date_before' );
473 if ( ! empty( $before_date ) ) {
474 $date_query['before'] = $before_date;
475 }
476
477 $date_query['inclusive'] = true;
478 break;
479 }
480
481 if ( ! empty( $date_query ) ) {
482 $args['date_query'] = $date_query;
483 }
484 }
485
486 return $args;
487 }
488
489 protected function getGroupControlQueryArgs() {
490
491 $settings = $this->get_settings();
492 $args = $this->setMetaQueryArgs();
493 $args['post_status'] = 'publish';
494 $args['suppress_filters'] = false;
495 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
496
497 // /**
498 // * Set Ignore Sticky
499 // */
500 // if (
501 // $this->getGroupControlQueryPostType() === 'post'
502 // && $this->get_settings('posts_ignore_sticky_posts') === 'yes'
503 // ) {
504 // $args['ignore_sticky_posts'] = true;
505
506 // if (in_array('current_post', $exclude_by)) {
507 // $args['post__not_in'] = [get_the_ID()];
508 // }
509 // }
510
511
512 if ( $this->getGroupControlQueryPostType() === 'manual_selection' ) {
513 /**
514 * Set Including Manually
515 */
516 $selected_ids = $this->get_settings( 'product_selected_ids' );
517 $selected_ids = wp_parse_id_list( $selected_ids );
518 $args['post_type'] = 'product';
519 if ( ! empty( $selected_ids ) ) {
520 $args['post__in'] = $selected_ids;
521 }
522 $args['ignore_sticky_posts'] = 1;
523 } elseif ( 'current_query' === $this->getGroupControlQueryPostType() ) {
524 /**
525 * Make Current Query
526 */
527 $wp_query = $GLOBALS['wp_query']->query_vars;
528
529 if ( isset( $wp_query['usk-template-builder'] ) && 'shop-page' === $wp_query['usk-template-builder'] || isset( $_GET['usk-template'] ) || \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
530 $args['post_type'] = 'product';
531 } else {
532 $args['post_type'] = 'product';
533 }
534
535 $args['paged'] = 1;
536
537 $page = max( 1, get_query_var( 'paged' ), get_query_var( 'page' ) );
538 $page = absint( empty( $_GET['product-page'] ) ? $page : $_GET['product-page'] );
539 $args['paged'] = $page;
540
541
542 $args['posts_per_page'] = $this->get_settings( 'product_limit' );
543 $args = apply_filters( 'ultimate_store_kit/query/get_query_args/current_query', $args );
544
545 } elseif ( '_related_post_type' === $this->getGroupControlQueryPostType() ) {
546 /**
547 * Set Related Query
548 */
549 $post_id = get_queried_object_id();
550 $related_post_id = is_singular() && ( 0 !== $post_id ) ? $post_id : null;
551 $args['post_type'] = get_post_type( $related_post_id );
552
553 $include_by = $this->getGroupControlQueryParamBy( 'include' );
554 if ( in_array( 'authors', $include_by ) ) {
555 $args['author__in'] = wp_parse_id_list( $settings['product_include_author_ids'] );
556 } else {
557 $args['author__in'] = get_post_field( 'post_author', $related_post_id );
558 }
559
560 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
561 if ( in_array( 'authors', $exclude_by ) ) {
562 $args['author__not_in'] = wp_parse_id_list( $settings['product_exclude_author_ids'] );
563 }
564
565 if ( in_array( 'current_post', $exclude_by ) ) {
566 $args['post__not_in'] = [ get_the_ID() ];
567 }
568
569 $args['ignore_sticky_posts'] = 1;
570 $args = apply_filters( 'ultimate_store_kit/query/get_query_args/related_query', $args );
571 } else {
572
573 /**
574 * Set Post Type
575 */
576 $args['post_type'] = $this->getGroupControlQueryPostType();
577
578 /**
579 * Set Exclude Post
580 */
581 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
582 $current_post = [];
583
584 if ( in_array( 'current_post', $exclude_by ) && is_singular() ) {
585 $current_post = [ get_the_ID() ];
586 }
587
588 if ( in_array( 'manual_selection', $exclude_by ) ) {
589 $exclude_ids = $settings['posts_exclude_ids'];
590 $args['post__not_in'] = array_merge( $current_post, wp_parse_id_list( $exclude_ids ) );
591 }
592 /**
593 * Set Authors
594 */
595 $include_by = $this->getGroupControlQueryParamBy( 'include' );
596 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
597 $include_users = [];
598 $exclude_users = [];
599
600 if ( in_array( 'authors', $include_by ) ) {
601 $include_users = wp_parse_id_list( $settings['product_include_author_ids'] );
602 }
603
604 if ( in_array( 'authors', $exclude_by ) ) {
605 $exclude_users = wp_parse_id_list( $settings['product_exclude_author_ids'] );
606 $include_users = array_diff( $include_users, $exclude_users );
607 }
608
609 if ( ! empty( $include_users ) ) {
610 $args['author__in'] = $include_users;
611 }
612
613 if ( ! empty( $exclude_users ) ) {
614 $args['author__not_in'] = $exclude_users;
615 ;
616 }
617
618 /**
619 * Set Taxonomy
620 */
621 $include_by = $this->getGroupControlQueryParamBy( 'include' );
622 $exclude_by = $this->getGroupControlQueryParamBy( 'exclude' );
623 $include_terms = [];
624 $exclude_terms = [];
625 $terms_query = [];
626
627 if ( in_array( 'terms', $include_by ) ) {
628 $include_terms = wp_parse_id_list( $settings['product_include_term_ids'] );
629 }
630
631 if ( in_array( 'terms', $exclude_by ) ) {
632 $exclude_terms = wp_parse_id_list( $settings['product_exclude_term_ids'] );
633 $include_terms = array_diff( $include_terms, $exclude_terms );
634 }
635
636 if ( ! empty( $include_terms ) ) {
637 $tax_terms_map = $this->mapGroupControlQuery( $include_terms );
638
639 foreach ( $tax_terms_map as $tax => $terms ) {
640 $terms_query[] = [
641 'taxonomy' => $tax,
642 'field' => 'term_id',
643 'terms' => $terms,
644 'operator' => 'IN',
645 ];
646 }
647 }
648
649 if ( ! empty( $exclude_terms ) ) {
650 $tax_terms_map = $this->mapGroupControlQuery( $exclude_terms );
651
652 foreach ( $tax_terms_map as $tax => $terms ) {
653 $terms_query[] = [
654 'taxonomy' => $tax,
655 'field' => 'term_id',
656 'terms' => $terms,
657 'operator' => 'NOT IN',
658 ];
659 }
660 }
661
662 if ( ! empty( $terms_query ) ) {
663 $args['tax_query'] = $terms_query;
664 $args['tax_query']['relation'] = 'AND';
665 }
666
667 $page = max( 1, get_query_var( 'paged' ), get_query_var( 'page' ) );
668 $page = absint( empty( $_GET['product-page'] ) ? $page : $_GET['product-page'] );
669 $args['paged'] = $page;
670 }
671
672 $query_id = $this->get_settings( 'query_id' );
673 if ( ! empty( $query_id ) ) {
674 add_action( 'pre_get_posts', [ $this, 'pre_get_posts_query_filter' ] );
675 }
676
677 return $args;
678 }
679
680
681 /**
682 * @return mixed
683 */
684 private function getGroupControlQueryPostType() {
685 return $this->get_settings( 'product_source' );
686 }
687
688 /**
689 * Get Query Params by args
690 *
691 * @param string $by
692 *
693 * @return array|mixed
694 */
695 private function getGroupControlQueryParamBy( $by = 'exclude' ) {
696 $mapBy = [
697 'exclude' => 'product_exclude_by',
698 'include' => 'product_include_by',
699 ];
700
701 $setting = $this->get_settings( $mapBy[ $by ] );
702
703 return ( ! empty( $setting ) ? $setting : [] );
704 }
705
706 /**
707 * @param array $term_ids
708 *
709 * @return array
710 */
711 private function mapGroupControlQuery( $term_ids = [] ) {
712 $terms = get_terms(
713 [
714 'term_taxonomy_id' => $term_ids,
715 'hide_empty' => false,
716 ]
717 );
718
719 $tax_terms_map = [];
720
721 foreach ( $terms as $term ) {
722 $taxonomy = $term->taxonomy;
723 $tax_terms_map[ $taxonomy ][] = $term->term_id;
724 }
725
726 return $tax_terms_map;
727 }
728
729 /**
730 * @return array|string[]|\WP_Post_Type[]
731 */
732 private function getGroupControlQueryPostTypes() {
733
734 $post_types = [
735 'product' => __( 'Product', 'ultimate-store-kit' ),
736 'manual_selection' => __( 'Manual Selection', 'ultimate-store-kit' ),
737 'current_query' => __( 'Current Query', 'ultimate-store-kit' ),
738 '_related_post_type' => __( 'Related', 'ultimate-store-kit' ),
739 ];
740
741 // $post_types = array_merge($post_types, $extra_types);
742
743 return $post_types;
744 }
745
746 public function pre_get_posts_query_filter( $wp_query ) {
747 if ( $this ) {
748 $query_id = $this->get_settings( 'query_id' );
749 do_action( "ultimate_store_kit/query/{$query_id}", $wp_query, $this );
750 }
751 }
752 }
753