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

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

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