PluginProbe
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder / 3.0.9
Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder v3.0.9
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 / modules / sub-category-carousel / widgets / sub-category-carousel.php

sub-category-carousel.php in Ultimate Store Kit – Store Builder Addons for Elementor, WooCommerce Store Builder, EDD Store Builder 3.0.9, at modules/sub-category-carousel/widgets/sub-category-carousel.php

900 lines 34.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace UltimateStoreKit\Modules\SubCategoryCarousel\Widgets;
4
5 use Elementor\Controls_Manager;
6 use Elementor\Group_Control_Background;
7 use Elementor\Group_Control_Border;
8 use Elementor\Group_Control_Box_Shadow;
9 use Elementor\Group_Control_Image_Size;
10 use Elementor\Group_Control_Typography;
11 // use Elementor\Utils;
12 use UltimateStoreKit\Base\Module_Base;
13 use UltimateStoreKit\Traits\Global_Terms_Query_Controls;
14 use UltimateStoreKit\traits\Global_Widget_Controls;
15 use UltimateStoreKit\traits\Global_Widget_Template;
16 use UltimateStoreKit\Classes\Utils;
17
18
19
20 if (!defined('ABSPATH')) {
21 exit;
22 }
23 // Exit if accessed directly
24
25 class Sub_Category_Carousel extends Module_Base {
26 use Global_Widget_Controls;
27 use Global_Terms_Query_Controls;
28 use Global_Widget_Template;
29 public function get_name() {
30 return 'usk-sub-category-carousel';
31 }
32
33 public function get_title() {
34 return BDTUSK . esc_html__('Sub Category Carousel', 'ultimate-store-kit');
35 }
36
37 public function get_icon() {
38 return 'usk-widget-icon usk-icon-sub-category-carousel';
39 }
40
41 public function get_categories() {
42 return ['ultimate-store-kit'];
43 }
44
45 public function get_keywords() {
46 return ['ultimate-store-kit', 'shop', 'store', 'sub', 'heading', 'product'];
47 }
48
49 public function get_style_depends() {
50 if ($this->usk_is_edit_mode()) {
51 return ['swiper', 'usk-all-styles'];
52 } else {
53 return ['swiper', 'usk-font', 'usk-sub-category-carousel'];
54 }
55 }
56
57 public function get_script_depends() {
58 if ($this->usk_is_edit_mode()) {
59 return ['swiper', 'usk-all-styles'];
60 } else {
61 return ['swiper', 'usk-sub-category-carousel'];
62 }
63 }
64 // public function get_custom_help_url() {
65 // return 'https://youtu.be/ksy2uZ5Hg3M';
66 // }
67
68 public function has_widget_inner_wrapper(): bool {
69 return ! \Elementor\Plugin::$instance->experiments->is_feature_active( 'e_optimized_markup' );
70 }
71 protected function register_controls() {
72 $this->start_controls_section(
73 'section_content_layout',
74 [
75 'label' => esc_html__('Layout', 'ultimate-store-kit'),
76 ]
77 );
78 $this->add_responsive_control(
79 'columns',
80 [
81 'label' => __('Columns', 'ultimate-store-kit'),
82 'type' => Controls_Manager::SELECT,
83 'default' => 3,
84 'tablet_default' => 2,
85 'mobile_default' => 1,
86 'options' => [
87 1 => '1',
88 2 => '2',
89 3 => '3',
90 4 => '4',
91 5 => '5',
92 6 => '6',
93 ],
94 ]
95 );
96 $this->add_control(
97 'alignment',
98 [
99 'label' => __('Title', 'ultimate-store-kit'),
100 'type' => Controls_Manager::HIDDEN,
101 'default' => 'traditional',
102 ]
103 );
104 $this->add_responsive_control(
105 'items_gap',
106 [
107 'label' => esc_html__('Item Gap', 'ultimate-store-kit'),
108 'type' => Controls_Manager::SLIDER,
109 'default' => [
110 'size' => 30,
111 ],
112 'range' => [
113 'px' => [
114 'min' => 0,
115 'max' => 100,
116 ],
117 ],
118 'tablet_default' => [
119 'size' => 20,
120 ],
121 'mobile_default' => [
122 'size' => 20,
123 ],
124 ]
125 );
126 $this->add_control(
127 'title_tags',
128 [
129 'label' => esc_html__('Title HTML Tag', 'ultimate-store-kit'),
130 'type' => Controls_Manager::SELECT,
131 'default' => 'h3',
132 'options' => ultimate_store_kit_title_tags(),
133 ]
134 );
135 $this->add_group_control(
136 Group_Control_Image_Size::get_type(),
137 [
138 'name' => 'category_thumbnail',
139 'label' => esc_html__('Image Size', 'ultimate-store-kit'),
140 'exclude' => ['custom'],
141 'default' => 'medium',
142 ]
143 );
144
145 $this->add_responsive_control(
146 'item_flex_direction',
147 [
148 'label' => esc_html__( 'Direction', 'ultimate-store-kit' ),
149 'type' => Controls_Manager::CHOOSE,
150 'options' => [
151 'row' => [
152 'title' => esc_html__( 'Row - horizontal', 'ultimate-store-kit' ),
153 'icon' => 'eicon-arrow-right',
154 ],
155 'column' => [
156 'title' => esc_html__( 'Column - vertical', 'ultimate-store-kit' ),
157 'icon' => 'eicon-arrow-down',
158 ],
159 'row-reverse' => [
160 'title' => esc_html__( 'Row - reversed', 'ultimate-store-kit' ),
161 'icon' => 'eicon-arrow-left',
162 ],
163 'column-reverse' => [
164 'title' => esc_html__( 'Column - reversed', 'ultimate-store-kit' ),
165 'icon' => 'eicon-arrow-up',
166 ],
167 ],
168 'selectors' => [
169 '{{WRAPPER}} .usk-sub-category-carousel .usk-item' => 'flex-direction: {{VALUE}};',
170 ],
171 ]
172 );
173
174 $this->add_responsive_control(
175 'text_align',
176 [
177 'label' => esc_html__( 'Text Align', 'ultimate-store-kit' ),
178 'type' => Controls_Manager::CHOOSE,
179 'options' => [
180 'left' => [
181 'title' => esc_html__( 'Left', 'ultimate-store-kit' ),
182 'icon' => 'eicon-text-align-left',
183 ],
184 'center' => [
185 'title' => esc_html__( 'Center', 'ultimate-store-kit' ),
186 'icon' => 'eicon-text-align-center',
187 ],
188 'right' => [
189 'title' => esc_html__( 'Right', 'ultimate-store-kit' ),
190 'icon' => 'eicon-text-align-right',
191 ],
192 'justify' => [
193 'title' => esc_html__( 'Justify', 'ultimate-store-kit' ),
194 'icon' => 'eicon-text-align-justify',
195 ],
196 ],
197 'selectors' => [
198 '{{WRAPPER}} .usk-sub-category-carousel .usk-content' => 'text-align: {{VALUE}};',
199 ],
200 ]
201 );
202 $this->end_controls_section();
203 $this->start_controls_section(
204 'section_term_query',
205 [
206 'label' => __('Query', 'ultimate-store-kit'),
207 'tab' => Controls_Manager::TAB_CONTENT,
208 ]
209 );
210
211 $this->start_controls_tabs(
212 'tabs_terms_include_exclude',
213 []
214 );
215 $this->start_controls_tab(
216 'tab_term_include',
217 [
218 'label' => __('Include', 'ultimate-store-kit'),
219 ]
220 );
221
222 $this->add_control(
223 'cats_include_by_id',
224 [
225 'label' => __('Categories', 'ultimate-store-kit'),
226 'type' => Controls_Manager::SELECT2,
227 'multiple' => true,
228 'label_block' => true,
229 'options' => ultimate_store_kit_get_only_parent_cats('product_cat'),
230 ]
231 );
232
233 $this->end_controls_tab();
234
235 $this->start_controls_tab(
236 'tab_term_exclude',
237 [
238 'label' => __('Exclude', 'ultimate-store-kit'),
239 ]
240 );
241
242 $this->add_control(
243 'cats_exclude_by_id',
244 [
245 'label' => __('Categories', 'ultimate-store-kit'),
246 'type' => Controls_Manager::SELECT2,
247 'multiple' => true,
248 'label_block' => true,
249 'options' => ultimate_store_kit_get_only_parent_cats('product_cat'),
250 ]
251 );
252
253 $this->end_controls_tab();
254 $this->end_controls_tabs();
255 $this->add_control(
256 'orderby',
257 [
258 'label' => __('Order By', 'ultimate-store-kit'),
259 'type' => Controls_Manager::SELECT,
260 'default' => 'name',
261 'options' => [
262 'name' => esc_html__('Name', 'ultimate-store-kit'),
263 'count' => esc_html__('Count', 'ultimate-store-kit'),
264 'slug' => esc_html__('Slug', 'ultimate-store-kit'),
265 ],
266 ]
267 );
268
269 $this->add_control(
270 'order',
271 [
272 'label' => __('Order', 'ultimate-store-kit'),
273 'type' => Controls_Manager::SELECT,
274 'default' => 'desc',
275 'options' => [
276 'desc' => __('Descending', 'ultimate-store-kit'),
277 'asc' => __('Ascending', 'ultimate-store-kit'),
278 ],
279 ]
280 );
281 $this->add_control(
282 'hide_empty',
283 [
284 'label' => __('Hide Empty', 'ultimate-store-kit'),
285 'type' => Controls_Manager::SWITCHER,
286 ]
287 );
288
289 $this->end_controls_section();
290 $this->register_global_controls_carousel_navigation();
291 $this->register_global_controls_carousel_settings();
292
293 $this->start_controls_section(
294 'section_content_thumbs_settings',
295 [
296 'label' => __('Image Settings', 'ultimate-store-kit'),
297 'tab' => Controls_Manager::TAB_CONTENT,
298 ]
299 );
300
301 $this->add_control(
302 'thumbs_autoplay',
303 [
304 'label' => __('Auto Play', 'ultimate-store-kit'),
305 'type' => Controls_Manager::SWITCHER,
306 'label_on' => __('Yes', 'ultimate-store-kit'),
307 'label_off' => __('No', 'ultimate-store-kit'),
308 'return_value' => 'yes',
309 'default' => 'yes',
310 ]
311 );
312
313 $this->add_control(
314 'thumbs_loop',
315 [
316 'label' => __('Loop', 'ultimate-store-kit'),
317 'type' => Controls_Manager::SWITCHER,
318 'label_on' => __('Yes', 'ultimate-store-kit'),
319 'label_off' => __('No', 'ultimate-store-kit'),
320 'return_value' => 'yes',
321 'default' => 'yes',
322 ]
323 );
324
325 $this->add_control(
326 'thumbs_autoplay_speed',
327 [
328 'label' => __('Delay', 'ultimate-store-kit'),
329 'type' => Controls_Manager::NUMBER,
330 'min' => 0,
331 'max' => 10000,
332 'step' => 5,
333 'default' => 1500,
334 'dynamic' => ['active' => true],
335 'condition' => [
336 'thumbs_autoplay' => 'yes'
337 ]
338 ]
339 );
340
341 $this->add_responsive_control(
342 'thumbs_slide_speed',
343 [
344 'label' => __('Speed', 'ultimate-store-kit'),
345 'type' => Controls_Manager::SLIDER,
346 'size_units' => ['px'],
347 'range' => [
348 'px' => [
349 'min' => 0,
350 'max' => 5000,
351 'step' => 1,
352 ]
353 ],
354 'default' => [
355 'unit' => 'px',
356 'size' => 1500,
357 ]
358 ]
359 );
360
361 $this->add_control(
362 'thumbs_effect',
363 [
364 'label' => __('Effect', 'ultimate-store-kit'),
365 'type' => Controls_Manager::SELECT,
366 'options' => [
367 'fade' => __('Fade', 'ultimate-store-kit'),
368 'slide' => __('Slide', 'ultimate-store-kit'),
369 'creative' => __('Creative', 'ultimate-store-kit'),
370 ],
371 'default' => 'fade',
372 'dynamic' => ['active' => true],
373 ]
374 );
375 //creative effect control
376 $this->add_control(
377 'creative_effect',
378 [
379 'label' => esc_html__( 'Creative Effect', 'ultimate-store-kit' ),
380 'type' => Controls_Manager::SELECT,
381 'default' => 'creative-1',
382 'options' => [
383 'creative-1' => esc_html__( 'Creative 1', 'ultimate-store-kit' ),
384 'creative-2' => esc_html__( 'Creative 2', 'ultimate-store-kit' ),
385 'creative-3' => esc_html__( 'Creative 3', 'ultimate-store-kit' ),
386 'creative-4' => esc_html__( 'Creative 4', 'ultimate-store-kit' ),
387 'creative-5' => esc_html__( 'Creative 5', 'ultimate-store-kit' ),
388 ],
389 'condition' => [
390 'thumbs_effect' => 'creative',
391 ],
392 ]
393 );
394
395 $this->end_controls_section();
396
397 /**
398 * Style Tab
399 */
400 $this->start_controls_section(
401 'section_style_item',
402 [
403 'label' => esc_html__('Item', 'ultimate-store-kit'),
404 'tab' => Controls_Manager::TAB_STYLE,
405 ]
406 );
407 $this->start_controls_tabs(
408 'item_tabs'
409 );
410 $this->start_controls_tab(
411 'item_tab_normal',
412 [
413 'label' => esc_html__('Normal', 'ultimate-store-kit'),
414 ]
415 );
416 $this->add_group_control(
417 Group_Control_Background::get_type(),
418 [
419 'name' => 'item_background',
420 'selector' => '{{WRAPPER}} .usk-sub-category-carousel .usk-item',
421 ]
422 );
423
424 $this->add_group_control(
425 Group_Control_Border::get_type(),
426 [
427 'name' => 'item_border',
428 'label' => esc_html__('Border', 'ultimate-store-kit'),
429 'selector' => '{{WRAPPER}} .usk-sub-category-carousel .usk-item',
430 'separator' => 'before',
431 ]
432 );
433 $this->add_responsive_control(
434 'item_radius',
435 [
436 'label' => esc_html__('Border Radius', 'ultimate-store-kit'),
437 'type' => Controls_Manager::DIMENSIONS,
438 'size_units' => ['px', '%', 'em'],
439 'selectors' => [
440 '{{WRAPPER}} .usk-sub-category-carousel .usk-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
441 ],
442 ]
443 );
444 $this->add_responsive_control(
445 'item_padding',
446 [
447 'label' => esc_html__('Padding', 'ultimate-store-kit'),
448 'type' => Controls_Manager::DIMENSIONS,
449 'size_units' => ['px', '%', 'em'],
450 'selectors' => [
451 '{{WRAPPER}} .usk-sub-category-carousel .usk-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
452 ],
453 ]
454 );
455 $this->add_responsive_control(
456 'item_margin',
457 [
458 'label' => esc_html__('Margin', 'ultimate-store-kit'),
459 'type' => Controls_Manager::DIMENSIONS,
460 'size_units' => ['px', '%', 'em'],
461 'selectors' => [
462 '{{WRAPPER}} .usk-sub-category-carousel .usk-item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
463 ],
464 ]
465 );
466 $this->add_responsive_control(
467 'space_between',
468 [
469 'label' => esc_html__( 'Space Between', 'ultimate-store-kit' ),
470 'type' => Controls_Manager::SLIDER,
471 'size_units' => [ 'px', 'em', '%' ],
472 'selectors' => [
473 '{{WRAPPER}} .usk-sub-category-carousel .usk-item' => 'gap: {{SIZE}}{{UNIT}};',
474 ],
475 ]
476 );
477
478 $this->add_group_control(
479 Group_Control_Box_Shadow::get_type(),
480 [
481 'name' => 'item_shadow',
482 'selector' => '{{WRAPPER}} .usk-sub-category-carousel .usk-item',
483 ]
484 );
485
486 $this->end_controls_tab();
487 $this->start_controls_tab(
488 'item_tab_hover',
489 [
490 'label' => esc_html__('Hover', 'ultimate-store-kit'),
491 ]
492 );
493 $this->add_control(
494 'item_hover_border_color',
495 [
496 'label' => esc_html__('Border Color', 'ultimate-store-kit'),
497 'type' => Controls_Manager::COLOR,
498 'selectors' => [
499 '{{WRAPPER}} .usk-sub-category-carousel .usk-item:hover' => 'border-color: {{VALUE}}',
500 ],
501 ]
502 );
503 $this->add_group_control(
504 Group_Control_Box_Shadow::get_type(),
505 [
506 'name' => 'item_hover_shadow',
507 'selector' => '{{WRAPPER}} .usk-sub-category-carousel .usk-item:hover',
508 ]
509 );
510 $this->end_controls_tab();
511 $this->end_controls_tabs();
512 $this->end_controls_section();
513 $this->start_controls_section(
514 'section_style_image',
515 [
516 'label' => esc_html__('Image', 'ultimate-store-kit'),
517 'tab' => Controls_Manager::TAB_STYLE,
518 ]
519 );
520
521 $this->add_responsive_control(
522 'image_height',
523 [
524 'label' => esc_html__('Height', 'ultimate-store-kit'),
525 'type' => Controls_Manager::SLIDER,
526 'size_units' => ['px', '%'],
527 'range' => [
528 'px' => [
529 'min' => 50,
530 'max' => 500,
531 'step' => 1,
532 ],
533 '%' => [
534 'min' => 10,
535 'max' => 100,
536 'step' => 1,
537 ],
538 ],
539 'selectors' => [
540 '{{WRAPPER}} .usk-sub-category-carousel .usk-image-slider .swiper-slide' => 'height: {{SIZE}}{{UNIT}};',
541 ],
542 ]
543 );
544 $this->add_responsive_control(
545 'image_width',
546 [
547 'label' => esc_html__('Width', 'ultimate-store-kit'),
548 'type' => Controls_Manager::SLIDER,
549 'size_units' => ['px', '%'],
550 'range' => [
551 'px' => [
552 'min' => 50,
553 'max' => 500,
554 'step' => 1,
555 ],
556 '%' => [
557 'min' => 10,
558 'max' => 100,
559 'step' => 1,
560 ],
561 ],
562 'selectors' => [
563 '{{WRAPPER}} .usk-sub-category-carousel .usk-image-slider' => 'width: {{SIZE}}{{UNIT}};',
564 ],
565 ]
566 );
567 $this->add_responsive_control(
568 'image_alignment',
569 [
570 'label' => esc_html__( 'Alignment', 'ultimate-store-kit' ),
571 'type' => Controls_Manager::CHOOSE,
572 'options' => [
573 'left' => [
574 'title' => esc_html__( 'Left', 'ultimate-store-kit' ),
575 'icon' => 'eicon-h-align-left',
576 ],
577 'center' => [
578 'title' => esc_html__( 'Center', 'ultimate-store-kit' ),
579 'icon' => 'eicon-h-align-center',
580 ],
581 'right' => [
582 'title' => esc_html__( 'Right', 'ultimate-store-kit' ),
583 'icon' => 'eicon-h-align-right',
584 ],
585 ],
586 'selectors_dictionary' => [
587 'left' => 'margin-left: inherit;',
588 'center' => 'margin-left: auto; margin-right: auto;',
589 'right' => 'margin-right: inherit;',
590 ],
591 'selectors' => [
592 '{{WRAPPER}} .usk-sub-category-carousel .usk-image-slider' => '{{VALUE}}',
593 ],
594 'conditions' => [
595 'relation' => 'and',
596 'terms' => [
597 [
598 'name' => 'image_width[size]',
599 'operator' => '>',
600 'value' => 0,
601 ],
602 [
603 'relation' => 'or',
604 'terms' => [
605 [
606 'name' => 'item_flex_direction',
607 'operator' => '==',
608 'value' => 'column',
609 ],
610 [
611 'name' => 'item_flex_direction',
612 'operator' => '==',
613 'value' => 'column-reverse',
614 ],
615 ],
616 ],
617 ],
618 ],
619 ]
620 );
621
622 $this->add_group_control(
623 Group_Control_Border::get_type(),
624 [
625 'name' => 'image_border',
626 'label' => esc_html__('Image Border', 'ultimate-store-kit'),
627 'selector' => '{{WRAPPER}} .usk-sub-category-carousel .usk-image-slider .swiper-slide',
628 'separator' => 'before',
629 ]
630 );
631
632 $this->add_responsive_control(
633 'image_border_radius',
634 [
635 'label' => esc_html__('Border Radius', 'ultimate-store-kit'),
636 'type' => Controls_Manager::DIMENSIONS,
637 'size_units' => ['px', '%'],
638 'selectors' => [
639 '{{WRAPPER}} .usk-sub-category-carousel .usk-image-slider .swiper-slide' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
640 ],
641 ]
642 );
643
644 $this->end_controls_section();
645 $this->start_controls_section(
646 'section_style_title',
647 [
648 'label' => esc_html__('Title', 'ultimate-store-kit'),
649 'tab' => Controls_Manager::TAB_STYLE,
650 ]
651 );
652 $this->add_control(
653 'title_color',
654 [
655 'label' => esc_html__('Color', 'ultimate-store-kit'),
656 'type' => Controls_Manager::COLOR,
657 'selectors' => [
658 '{{WRAPPER}} .usk-sub-category-carousel .usk-name' => 'color: {{VALUE}}',
659 ],
660 ]
661 );
662 $this->add_responsive_control(
663 'title_margin',
664 [
665 'label' => esc_html__('Margin', 'ultimate-store-kit'),
666 'type' => Controls_Manager::DIMENSIONS,
667 'size_units' => ['px', '%'],
668 'selectors' => [
669 '{{WRAPPER}} .usk-sub-category-carousel .usk-name' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
670 ],
671 ]
672 );
673 $this->add_group_control(
674 Group_Control_Typography::get_type(),
675 [
676 'name' => 'title_typography',
677 'label' => esc_html__('Typography', 'ultimate-store-kit'),
678 'selector' => '{{WRAPPER}} .usk-sub-category-carousel .usk-name',
679 ]
680 );
681 $this->end_controls_section();
682 $this->start_controls_section(
683 'section_style_sub_category',
684 [
685 'label' => esc_html__('Sub Category', 'ultimate-store-kit'),
686 'tab' => Controls_Manager::TAB_STYLE,
687 ]
688 );
689
690 $this->add_control(
691 'sub_category_color',
692 [
693 'label' => esc_html__('Color', 'ultimate-store-kit'),
694 'type' => Controls_Manager::COLOR,
695 'selectors' => [
696 '{{WRAPPER}} .usk-sub-category-carousel .usk-list a' => 'color: {{VALUE}}',
697 ],
698 ]
699 );
700
701 $this->add_control(
702 'hover_sub_category_color',
703 [
704 'label' => esc_html__('Hover Color', 'ultimate-store-kit'),
705 'type' => Controls_Manager::COLOR,
706 'selectors' => [
707 '{{WRAPPER}} .usk-sub-category-carousel .usk-list a:hover' => 'color: {{VALUE}};',
708 ],
709 ]
710 );
711
712 $this->add_responsive_control(
713 'sub_category_margin',
714 [
715 'label' => esc_html__('Margin', 'ultimate-store-kit'),
716 'type' => Controls_Manager::DIMENSIONS,
717 'size_units' => ['px', '%'],
718 'selectors' => [
719 '{{WRAPPER}} .usk-sub-category-carousel .usk-list' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
720 ],
721 ]
722 );
723 $this->add_group_control(
724 Group_Control_Typography::get_type(),
725 [
726 'name' => 'sub_category_typography',
727 'label' => esc_html__('Typography', 'ultimate-store-kit'),
728 'selector' => '{{WRAPPER}} .usk-sub-category-carousel .usk-list a',
729 ]
730 );
731 $this->end_controls_section();
732 $this->start_controls_section(
733 'section_style_all_category',
734 [
735 'label' => esc_html__('Read More', 'ultimate-store-kit'),
736 'tab' => Controls_Manager::TAB_STYLE,
737 ]
738 );
739
740 $this->add_control(
741 'all_category_color',
742 [
743 'label' => esc_html__('Color', 'ultimate-store-kit'),
744 'type' => Controls_Manager::COLOR,
745 'selectors' => [
746 '{{WRAPPER}} .usk-sub-category-carousel .usk-link-btn a' => 'color: {{VALUE}}',
747 ],
748 ]
749 );
750
751 $this->add_control(
752 'hover_all_category_color',
753 [
754 'label' => esc_html__('Hover Color', 'ultimate-store-kit'),
755 'type' => Controls_Manager::COLOR,
756 'selectors' => [
757 '{{WRAPPER}} .usk-sub-category-carousel .usk-link-btn a:hover' => 'color: {{VALUE}};',
758 ],
759 ]
760 );
761
762 $this->add_responsive_control(
763 'all_category_margin',
764 [
765 'label' => esc_html__('Margin', 'ultimate-store-kit'),
766 'type' => Controls_Manager::DIMENSIONS,
767 'size_units' => ['px', '%'],
768 'selectors' => [
769 '{{WRAPPER}} .usk-sub-category-carousel .usk-link-btn a' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
770 ],
771 ]
772 );
773 $this->add_group_control(
774 Group_Control_Typography::get_type(),
775 [
776 'name' => 'all_category_typography',
777 'label' => esc_html__('Typography', 'ultimate-store-kit'),
778 'selector' => '{{WRAPPER}} .usk-sub-category-carousel .usk-link-btn a',
779 ]
780 );
781 $this->end_controls_section();
782
783 $this->register_global_controls_navigation_style();
784 }
785
786 public function render_items() {
787 $settings = $this->get_settings_for_display();
788 $args = [
789 'taxonomy' => 'product_cat',
790 'orderby' => isset($settings['orderby']) ? $settings['orderby'] : 'name',
791 'order' => isset($settings['order']) ? $settings['order'] : 'ASC',
792 'hide_empty' => isset($settings['hide_empty']) && ($settings['hide_empty'] == 'yes') ? 1 : 0,
793 ];
794 if (isset($settings['cats_include_by_id']) && !empty($settings['cats_include_by_id'])) {
795 $args['include'] = $settings['cats_include_by_id'];
796 }
797 if (isset($settings['cats_exclude_by_id']) && !empty($settings['cats_exclude_by_id'])) {
798 $args['exclude'] = $settings['cats_exclude_by_id'];
799 }
800 // print_r($args);
801 $taxonomies = get_terms($args);
802 if (!(empty($taxonomies))) :
803 $index = 50;
804 foreach ($taxonomies as $category) :
805 if ($category->parent == 0 && get_term_children($category->term_id, 'product_cat')) :
806 $this->add_render_attribute('sub-category-item', [
807 'class' => [
808 'usk-item swiper-slide'
809 ],
810 'data-settings' => [
811 wp_json_encode(array_filter([
812 "autoplay" => ("yes" == $settings["thumbs_autoplay"]) ? ["delay" => $settings["thumbs_autoplay_speed"] + $index += rand(500, 1500)] : false,
813 "loop" => ($settings["thumbs_loop"] == "yes") ? true : false,
814 "speed" => $settings["thumbs_slide_speed"]["size"],
815 "fadeEffect" => [ 'crossFade' => true ],
816 "effect" => $settings["thumbs_effect"],
817 "creativeEffect" => isset($settings["creative_effect"]) ? $settings["creative_effect"] : false,
818 ]))
819 ]
820 ], null, true);
821 ?>
822 <div <?php $this->print_render_attribute_string('sub-category-item'); ?>>
823 <div class="swiper usk-image-slider">
824 <div class="swiper-wrapper">
825 <?php
826 $parentcategory_thumb_id = get_term_meta($category->term_id, 'thumbnail_id', true);
827 $images = [$parentcategory_thumb_id];
828
829 // Get subcategories for the specified parent category
830 $args = array(
831 'taxonomy' => 'product_cat',
832 'orderby' => isset($settings['orderby']) ? $settings['orderby'] : 'name',
833 'order' => isset($settings['order']) ? $settings['order'] : 'ASC',
834 'hide_empty' => isset($settings['hide_empty']) && ($settings['hide_empty'] == 'yes') ? 1 : 0,
835 'parent' => $category->term_id,
836 );
837
838 $subcategories = get_terms($args);
839
840 foreach ($subcategories as $subcategory) :
841 if ($subcategory->parent == $category->term_id) {
842 $subcategory_thumb_id = get_term_meta($subcategory->term_id, 'thumbnail_id', true);
843 $images[] = $subcategory_thumb_id;
844 }
845 endforeach;
846
847 foreach ($images as $image_id) :
848 $img_url = wp_get_attachment_image_url($image_id, $settings['category_thumbnail_size']);
849 if (!(empty($img_url))) : ?>
850 <div class="swiper-slide">
851 <div class="usk-image-wrap">
852 <img class="usk-img" src="<?php echo esc_url($img_url); ?>" />
853 </div>
854 </div>
855 <?php
856 endif;
857 endforeach;
858 ?>
859 </div>
860 </div>
861 <div class="usk-content">
862
863 <?php printf(
864 '<%1$s class="usk-name">%2$s</%1$s>',
865 esc_attr(Utils::get_valid_html_tag($settings['title_tags'])),
866 esc_html($category->name)
867 );
868 ?>
869 <div class="usk-list">
870 <?php
871 foreach ($subcategories as $key => $subcategory) :
872 if ($subcategory->parent == $category->term_id) {
873 printf('<a href="%1$s">%2$s</a>', esc_url(get_term_link($subcategory->term_id, 'product_cat')), esc_html($subcategory->name));
874 }
875 endforeach;
876 ?>
877 </div>
878
879 <div class="usk-link-btn">
880 <?php printf(
881 '<a href="%2$s"><span>%1$s</span><i class="usk-icon-arrow-right-8"></i></a>',
882 /* translators: %s: Category name */
883 sprintf(esc_html__('All %s', 'ultimate-store-kit'), $category->name),
884 esc_url(get_term_link($category->term_id, 'product_cat'))
885 ); ?>
886 </div>
887 </div>
888 </div>
889 <?php
890 endif;
891 endforeach;
892 endif;
893 }
894 public function render() {
895 $this->register_global_template_carousel_header();
896 $this->render_items();
897 $this->usk_register_global_template_carousel_footer();
898 }
899 }
900