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 / heaven-slider / widgets / heaven-slider.php

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

1,279 lines 46.2 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\HeavenSlider\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_Css_Filter;
10 use Elementor\Group_Control_Image_Size;
11 use Elementor\Group_Control_Text_Shadow;
12 use Elementor\Group_Control_Text_Stroke;
13 use Elementor\Group_Control_Typography;
14 use UltimateStoreKit\Base\Module_Base;
15 use UltimateStoreKit\Includes\Controls\GroupQuery\Group_Control_Query;
16 use UltimateStoreKit\traits\Global_Widget_Controls;
17 use UltimateStoreKit\traits\Global_Widget_Template;
18 use UltimateStoreKit\Classes\Utils;
19 use WP_Query;
20
21 if (!defined('ABSPATH')) {
22 exit;
23 }
24
25 // Exit if accessed directly
26
27 class Heaven_Slider extends Module_Base {
28 use Global_Widget_Controls;
29 use Global_Widget_Template;
30 use Group_Control_Query;
31
32 /**
33 * @var \WP_Query
34 */
35 private $_query = null;
36 public function get_name() {
37 return 'usk-heaven-slider';
38 }
39
40 public function get_title() {
41 return esc_html__('Heaven Slider', 'ultimate-store-kit');
42 }
43
44 public function get_icon() {
45 return 'usk-widget-icon usk-icon-heaven-slider usk-new';
46 }
47
48 public function get_categories() {
49 return ['ultimate-store-kit'];
50 }
51
52 public function get_keywords() {
53 return ['product', 'heaven slider', 'table', 'wc', 'carousel', 'slider'];
54 }
55
56 public function get_script_depends() {
57 if ($this->usk_is_edit_mode()) {
58 return ['swiper', 'micromodal', 'usk-site'];
59 } else {
60 return ['swiper', 'micromodal', 'usk-heaven-slider'];
61 }
62 }
63
64 public function get_style_depends() {
65 if ($this->usk_is_edit_mode()) {
66 return ['swiper', 'usk-all-styles'];
67 } else {
68 return ['swiper', 'usk-font', 'usk-heaven-slider'];
69 }
70 }
71
72 // public function get_custom_help_url() {
73 // return 'https://youtu.be/3VkvEpVaNAM';
74 // }
75 public function get_query() {
76 return $this->_query;
77 }
78 public function has_widget_inner_wrapper(): bool {
79 return !\Elementor\Plugin::$instance->experiments->is_feature_active('e_optimized_markup');
80 }
81 protected function register_controls() {
82 $this->start_controls_section(
83 'section_woocommerce_layout',
84 [
85 'label' => esc_html__('Layout', 'ultimate-store-kit'),
86 ]
87 );
88 $this->add_responsive_control(
89 'items_height',
90 [
91 'label' => esc_html__('Item Height', 'ultimate-store-kit'),
92 'type' => Controls_Manager::SLIDER,
93 'size_units' => ['px', 'vh', 'em'],
94 'range' => [
95 'px' => [
96 'min' => 200,
97 'max' => 1080,
98 ],
99 'vh' => [
100 'min' => 10,
101 'max' => 100,
102 ],
103 ],
104 'selectors' => [
105 '{{WRAPPER}} .usk-heaven-slider' => 'height: {{SIZE}}{{UNIT}}',
106 ],
107 ]
108 );
109
110 $this->add_group_control(
111 Group_Control_Image_Size::get_type(),
112 [
113 'name' => 'image',
114 'label' => esc_html__('Image Size', 'ultimate-store-kit'),
115 'exclude' => ['custom'],
116 'default' => 'full',
117 ]
118 );
119
120 $this->add_control(
121 'content_position',
122 [
123 'label' => esc_html__('Content Position', 'ultimate-store-kit'),
124 'type' => Controls_Manager::CHOOSE,
125 'options' => [
126 'row-reverse' => [
127 'title' => esc_html__('Left', 'ultimate-store-kit'),
128 'icon' => 'eicon-h-align-left',
129 ],
130 'row' => [
131 'title' => esc_html__('Right', 'ultimate-store-kit'),
132 'icon' => 'eicon-h-align-right',
133 ],
134 ],
135 'selectors' => [
136 '(desktop){{WRAPPER}} .usk-heaven-slider .usk-item-box' => 'flex-direction: {{VALUE}};',
137 '(tablet){{WRAPPER}} .usk-heaven-slider .usk-item-box' => 'flex-direction: {{VALUE}};',
138 '(mobile){{WRAPPER}} .usk-heaven-slider .usk-item-box' => 'flex-direction: column;',
139 ],
140 ]
141 );
142
143
144 $this->add_control(
145 'show_arrows',
146 [
147 'label' => esc_html__('Show Navigation', 'ultimate-store-kit'),
148 'type' => Controls_Manager::SWITCHER,
149 'default' => 'yes',
150 ]
151 );
152
153 $this->add_control(
154 'show_thumbs',
155 [
156 'label' => esc_html__('Show Thumbs', 'ultimate-store-kit'),
157 'type' => Controls_Manager::SWITCHER,
158 'default' => 'yes',
159 ]
160 );
161
162 $this->end_controls_section();
163
164 //Query
165 $this->start_controls_section(
166 'section_post_query_builder',
167 [
168 'label' => __('Query', 'ultimate-store-kit'),
169 'tab' => Controls_Manager::TAB_CONTENT,
170 ]
171 );
172 $this->register_query_builder_controls();
173 $this->end_controls_section();
174
175 $this->register_global_controls_additional();
176
177 /**
178 * Slider settings
179 */
180 $this->start_controls_section(
181 'section_carousel_settings',
182 [
183 'label' => __('Slider Settings', 'ultimate-store-kit'),
184 ]
185 );
186
187 $this->add_control(
188 'autoplay',
189 [
190 'label' => __('Autoplay', 'ultimate-store-kit'),
191 'type' => Controls_Manager::SWITCHER,
192 'default' => 'yes',
193
194 ]
195 );
196
197 $this->add_control(
198 'autoplay_speed',
199 [
200 'label' => esc_html__('Autoplay Speed', 'ultimate-store-kit'),
201 'type' => Controls_Manager::NUMBER,
202 'default' => 5000,
203 'condition' => [
204 'autoplay' => 'yes',
205 ],
206 ]
207 );
208
209 $this->add_control(
210 'pauseonhover',
211 [
212 'label' => esc_html__('Pause on Hover', 'ultimate-store-kit'),
213 'type' => Controls_Manager::SWITCHER,
214 ]
215 );
216
217 $this->add_control(
218 'grab_cursor',
219 [
220 'label' => __('Grab Cursor', 'ultimate-store-kit'),
221 'type' => Controls_Manager::SWITCHER,
222 ]
223 );
224
225 $this->add_control(
226 'loop',
227 [
228 'label' => __('Loop', 'ultimate-store-kit'),
229 'type' => Controls_Manager::SWITCHER,
230 'default' => 'yes',
231
232 ]
233 );
234
235 $this->add_control(
236 'mousewheel',
237 [
238 'label' => __('Mousewheel', 'ultimate-store-kit'),
239 'type' => Controls_Manager::SWITCHER,
240 ]
241 );
242
243 $this->add_control(
244 'speed',
245 [
246 'label' => __('Animation Speed (ms)', 'ultimate-store-kit'),
247 'type' => Controls_Manager::SLIDER,
248 'default' => [
249 'size' => 800,
250 ],
251 'range' => [
252 'px' => [
253 'min' => 100,
254 'max' => 5000,
255 'step' => 50,
256 ],
257 ],
258 ]
259 );
260
261 $this->add_control(
262 'observer',
263 [
264 'label' => __('Observer', 'ultimate-store-kit'),
265 'description' => __('When you use carousel in any hidden place (in tabs, accordion etc) keep it yes.', 'ultimate-store-kit'),
266 'type' => Controls_Manager::SWITCHER,
267 ]
268 );
269
270 $this->end_controls_section();
271
272 /**
273 * Start Style Controls
274 */
275 $this->start_controls_section(
276 'section_style_items',
277 [
278 'label' => esc_html__('Slider', 'ultimate-store-kit'),
279 'tab' => Controls_Manager::TAB_STYLE,
280 ]
281 );
282
283 $this->add_group_control(
284 Group_Control_Background::get_type(),
285 [
286 'name' => 'slider_items_background',
287 'label' => esc_html__('Background', 'ultimate-store-kit'),
288 'types' => ['classic', 'gradient'],
289 'selector' => '{{WRAPPER}} .usk-heaven-slider',
290 ]
291 );
292
293 $this->add_group_control(
294 Group_Control_Border::get_type(),
295 [
296 'name' => 'slider_items_border',
297 'label' => __('Border', 'ultimate-store-kit'),
298 'fields_options' => [
299 'border' => [
300 'default' => 'solid',
301 ],
302 'width' => [
303 'default' => [
304 'top' => '1',
305 'right' => '1',
306 'bottom' => '1',
307 'left' => '1',
308 'isLinked' => false,
309 ],
310 ],
311 'color' => [
312 'default' => '#5bb300',
313 ],
314 ],
315 'selector' => '{{WRAPPER}} .usk-heaven-slider',
316 ]
317 );
318
319 $this->add_responsive_control(
320 'slider_items_radius',
321 [
322 'label' => esc_html__('Border Radius', 'ultimate-store-kit'),
323 'type' => Controls_Manager::DIMENSIONS,
324 'size_units' => ['px'],
325 'selectors' => [
326 '{{WRAPPER}} .usk-heaven-slider' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; overflow: hidden;',
327 ],
328 ]
329 );
330 $this->add_responsive_control(
331 'slider_items_padding',
332 [
333 'label' => esc_html__('Padding', 'ultimate-store-kit'),
334 'type' => Controls_Manager::DIMENSIONS,
335 'size_units' => [
336 'px',
337 'em',
338 '%',
339 ],
340 'selectors' => [
341 '{{WRAPPER}} .usk-heaven-slider' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
342 ],
343 ]
344 );
345
346 $this->end_controls_section();
347
348 $this->start_controls_section(
349 'section_style_image',
350 [
351 'label' => esc_html__('Image', 'ultimate-store-kit'),
352 'tab' => Controls_Manager::TAB_STYLE,
353 ]
354 );
355
356 $this->add_group_control(
357 Group_Control_Border::get_type(),
358 [
359 'name' => 'image_border',
360 'label' => esc_html__('Border', 'ultimate-store-kit'),
361 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-main-slider .usk-image-wrap .usk-img',
362 ]
363 );
364
365 $this->add_responsive_control(
366 'image_radius',
367 [
368 'label' => esc_html__('Border Radius', 'ultimate-store-kit'),
369 'type' => Controls_Manager::DIMENSIONS,
370 'size_units' => ['px', '%', 'em'],
371 'selectors' => [
372 '{{WRAPPER}} .usk-heaven-slider .usk-main-slider .usk-image-wrap .usk-img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
373 ],
374 ]
375 );
376
377 $this->add_group_control(
378 Group_Control_Css_Filter::get_type(),
379 [
380 'name' => 'image_css_filters',
381 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-main-slider .usk-image-wrap .usk-img',
382 ]
383 );
384
385 $this->end_controls_section();
386
387 $this->start_controls_section(
388 'section_style_title',
389 [
390 'label' => esc_html__('Title', 'ultimate-store-kit'),
391 'tab' => Controls_Manager::TAB_STYLE,
392 'condition' => [
393 'show_title' => 'yes',
394 ],
395 ]
396 );
397
398 $this->add_control(
399 'title_color',
400 [
401 'label' => esc_html__('Color', 'ultimate-store-kit'),
402 'type' => Controls_Manager::COLOR,
403 'selectors' => [
404 '{{WRAPPER}} .usk-main-slider .usk-title a' => 'color: {{VALUE}}',
405 ],
406 ]
407 );
408
409 $this->add_control(
410 'hover_title_color',
411 [
412 'label' => esc_html__('Hover Color', 'ultimate-store-kit'),
413 'type' => Controls_Manager::COLOR,
414 'selectors' => [
415 '{{WRAPPER}} .usk-main-slider .usk-title a:hover' => 'color: {{VALUE}};',
416 ],
417 ]
418 );
419
420 $this->add_responsive_control(
421 'title_margin',
422 [
423 'label' => esc_html__('Margin', 'ultimate-store-kit'),
424 'type' => Controls_Manager::DIMENSIONS,
425 'size_units' => ['px', '%'],
426 'selectors' => [
427 '{{WRAPPER}} .usk-main-slider .usk-title' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
428 ],
429 ]
430 );
431
432 $this->add_group_control(
433 Group_Control_Typography::get_type(),
434 [
435 'name' => 'title_typography',
436 'label' => esc_html__('Typography', 'ultimate-store-kit'),
437 'selector' => '{{WRAPPER}} .usk-main-slider .usk-title',
438 ]
439 );
440
441 $this->add_group_control(
442 Group_Control_Text_Shadow::get_type(),
443 [
444 'name' => 'title_text_shadow',
445 'selector' => '{{WRAPPER}} .usk-main-slider .usk-title',
446 ]
447 );
448
449 $this->add_group_control(
450 Group_Control_Text_Stroke::get_type(),
451 [
452 'name' => 'title_text_stroke',
453 'selector' => '{{WRAPPER}} .usk-main-slider .usk-title',
454 ]
455 );
456
457 $this->end_controls_section();
458
459 $this->start_controls_section(
460 'section_style_text',
461 [
462 'label' => esc_html__('Text', 'ultimate-store-kit'),
463 'tab' => Controls_Manager::TAB_STYLE,
464 'condition' => [
465 'show_excerpt' => 'yes',
466 ],
467 ]
468 );
469
470 $this->add_control(
471 'text_color',
472 [
473 'label' => esc_html__('Color', 'ultimate-store-kit'),
474 'type' => Controls_Manager::COLOR,
475 'selectors' => [
476 '{{WRAPPER}} .usk-main-slider .usk-text' => 'color: {{VALUE}}',
477 ],
478 ]
479 );
480
481 $this->add_responsive_control(
482 'text_margin',
483 [
484 'label' => esc_html__('Margin', 'ultimate-store-kit'),
485 'type' => Controls_Manager::DIMENSIONS,
486 'size_units' => ['px', '%'],
487 'selectors' => [
488 '{{WRAPPER}} .usk-main-slider .usk-text' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
489 ],
490 ]
491 );
492
493 $this->add_group_control(
494 Group_Control_Typography::get_type(),
495 [
496 'name' => 'text_typography',
497 'label' => esc_html__('Typography', 'ultimate-store-kit'),
498 'selector' => '{{WRAPPER}} .usk-main-slider .usk-text',
499 ]
500 );
501
502 $this->end_controls_section();
503
504 //Global Controls Price
505 $this->register_global_controls_price();
506
507 $this->start_controls_section(
508 'section_style_rating',
509 [
510 'label' => esc_html__('Rating', 'ultimate-store-kit'),
511 'tab' => Controls_Manager::TAB_STYLE,
512 'condition' => [
513 'show_rating' => 'yes',
514 ],
515 ]
516 );
517
518 $this->add_control(
519 'rating_color',
520 [
521 'label' => esc_html__('Color', 'ultimate-store-kit'),
522 'type' => Controls_Manager::COLOR,
523 'default' => '#e7e7e7',
524 'selectors' => [
525 '{{WRAPPER}} .' . $this->get_name() . ' .usk-rating .star-rating::before' => 'color: {{VALUE}};',
526 ],
527 ]
528 );
529
530 $this->add_control(
531 'active_rating_color',
532 [
533 'label' => esc_html__('Active Color', 'ultimate-store-kit'),
534 'type' => Controls_Manager::COLOR,
535 'default' => '#FFCC00',
536 'selectors' => [
537 '{{WRAPPER}} .' . $this->get_name() . ' .usk-rating .star-rating span::before' => 'color: {{VALUE}};',
538 ],
539 ]
540 );
541
542 $this->add_responsive_control(
543 'rating_margin',
544 [
545 'label' => esc_html__('Margin', 'ultimate-store-kit'),
546 'type' => Controls_Manager::DIMENSIONS,
547 'size_units' => ['px', '%', 'em'],
548 'selectors' => [
549 '{{WRAPPER}} .usk-heaven-slider .usk-main-slider .usk-rating' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
550 ],
551 ]
552 );
553
554 $this->end_controls_section();
555
556 /**
557 * Global Controls Badge & Action Button
558 */
559 $this->register_global_controls_badge();
560 $this->register_global_controls_action_btn();
561
562 $this->start_controls_section(
563 'section_style_category',
564 [
565 'label' => esc_html__('Category', 'ultimate-store-kit'),
566 'tab' => Controls_Manager::TAB_STYLE,
567 'condition' => [
568 'show_category' => 'yes',
569 ],
570 ]
571 );
572 $this->start_controls_tabs(
573 'category_tabs'
574 );
575 $this->start_controls_tab(
576 'category_tab_normal',
577 [
578 'label' => esc_html__('Normal', 'ultimate-store-kit'),
579 ]
580 );
581 $this->add_control(
582 'category_color',
583 [
584 'label' => esc_html__('Color', 'ultimate-store-kit'),
585 'type' => Controls_Manager::COLOR,
586 'selectors' => [
587 '{{WRAPPER}} .usk-heaven-slider .usk-category a' => 'color: {{VALUE}};',
588 ],
589 ]
590 );
591
592 $this->add_control(
593 'category_text_decoration_color',
594 [
595 'label' => esc_html__('Text Decoration Color', 'ultimate-store-kit'),
596 'type' => Controls_Manager::COLOR,
597 'selectors' => [
598 '{{WRAPPER}} .usk-heaven-slider .usk-category a' => 'text-decoration-color: {{VALUE}} !important;',
599 ],
600 'condition' => [
601 'category_typography_text_decoration!' => 'none',
602 ],
603 ]
604 );
605 $this->add_group_control(
606 Group_Control_Background::get_type(),
607 [
608 'name' => 'category_bg_color',
609 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-category a',
610 ]
611 );
612 $this->add_group_control(
613 Group_Control_Border::get_type(),
614 [
615 'name' => 'category_border',
616 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-category a',
617 'separator' => 'before',
618 ]
619 );
620 $this->add_responsive_control(
621 'category_radius',
622 [
623 'label' => esc_html__('Border Radius', 'ultimate-store-kit'),
624 'type' => Controls_Manager::DIMENSIONS,
625 'size_units' => ['px', '%', 'em'],
626 'selectors' => [
627 '{{WRAPPER}} .usk-heaven-slider .usk-category a' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
628 ],
629 ]
630 );
631 $this->add_responsive_control(
632 'category_padding',
633 [
634 'label' => esc_html__('Padding', 'ultimate-store-kit'),
635 'type' => Controls_Manager::DIMENSIONS,
636 'size_units' => ['px', '%'],
637 'selectors' => [
638 '{{WRAPPER}} .usk-heaven-slider .usk-category a' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
639 ],
640 ]
641 );
642 $this->add_responsive_control(
643 'category_margin',
644 [
645 'label' => esc_html__('Margin', 'ultimate-store-kit'),
646 'type' => Controls_Manager::DIMENSIONS,
647 'size_units' => ['px', '%'],
648 'selectors' => [
649 '{{WRAPPER}} .usk-heaven-slider .usk-category' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
650 ],
651 ]
652 );
653
654 $this->add_responsive_control(
655 'category_space_between',
656 [
657 'label' => esc_html__('Space Between', 'ultimate-store-kit'),
658 'type' => Controls_Manager::SLIDER,
659 'size_units' => ['px', 'em', '%'],
660 'selectors' => [
661 '{{WRAPPER}} .usk-heaven-slider .usk-category' => 'gap: {{SIZE}}{{UNIT}};',
662 ],
663 ]
664 );
665 $this->add_group_control(
666 Group_Control_Typography::get_type(),
667 [
668 'name' => 'category_typography',
669 'label' => esc_html__('Typography', 'ultimate-store-kit'),
670 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-category a',
671 ]
672 );
673 $this->add_group_control(
674 Group_Control_Box_Shadow::get_type(),
675 [
676 'name' => 'category_shadow',
677 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-category a',
678 ]
679 );
680 $this->end_controls_tab();
681 $this->start_controls_tab(
682 'category_tab_hover',
683 [
684 'label' => esc_html__('Hover', 'ultimate-store-kit'),
685 ]
686 );
687 $this->add_control(
688 'hover_category_color',
689 [
690 'label' => esc_html__('Color', 'ultimate-store-kit'),
691 'type' => Controls_Manager::COLOR,
692 'selectors' => [
693 '{{WRAPPER}} .usk-heaven-slider .usk-category a:hover' => 'color: {{VALUE}};',
694 ],
695 ]
696 );
697 $this->add_group_control(
698 Group_Control_Background::get_type(),
699 [
700 'name' => 'hover_category_bg_color',
701 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-category a:hover',
702 ]
703 );
704 $this->add_control(
705 'hover_category_border_color',
706 [
707 'label' => esc_html__('Border Color', 'ultimate-store-kit'),
708 'type' => Controls_Manager::COLOR,
709 'selectors' => [
710 '{{WRAPPER}} .usk-heaven-slider .usk-category a:hover' => 'border-color: {{VALUE}};',
711 ],
712 'condition' => [
713 'category_border_border!' => '',
714 ],
715 'separator' => 'before',
716 ]
717 );
718 $this->end_controls_tab();
719 $this->end_controls_tabs();
720 $this->end_controls_section();
721
722 $this->start_controls_section(
723 'section_style_navigation',
724 [
725 'label' => __('Navigation', 'ultimate-store-kit'),
726 'tab' => Controls_Manager::TAB_STYLE,
727 'condition' => [
728 'show_arrows' => 'yes',
729 ],
730 ]
731 );
732
733 $this->add_control(
734 'nav_arrows_icon',
735 [
736 'label' => esc_html__('Arrows Icon', 'ultimate-store-kit'),
737 'type' => Controls_Manager::SELECT,
738 'default' => '0',
739 'options' => [
740 '0' => esc_html__('Default', 'ultimate-store-kit'),
741 '1' => esc_html__('Style 1', 'ultimate-store-kit'),
742 '2' => esc_html__('Style 2', 'ultimate-store-kit'),
743 '3' => esc_html__('Style 3', 'ultimate-store-kit'),
744 '4' => esc_html__('Style 4', 'ultimate-store-kit'),
745 '5' => esc_html__('Style 5', 'ultimate-store-kit'),
746 '6' => esc_html__('Style 6', 'ultimate-store-kit'),
747 '7' => esc_html__('Style 7', 'ultimate-store-kit'),
748 '8' => esc_html__('Style 8', 'ultimate-store-kit'),
749 '9' => esc_html__('Style 9', 'ultimate-store-kit'),
750 '10' => esc_html__('Style 10', 'ultimate-store-kit'),
751 '11' => esc_html__('Style 11', 'ultimate-store-kit'),
752 '12' => esc_html__('Style 12', 'ultimate-store-kit'),
753 '13' => esc_html__('Style 13', 'ultimate-store-kit'),
754 '14' => esc_html__('Style 14', 'ultimate-store-kit'),
755 '15' => esc_html__('Style 15', 'ultimate-store-kit'),
756 '16' => esc_html__('Style 16', 'ultimate-store-kit'),
757 '17' => esc_html__('Style 17', 'ultimate-store-kit'),
758 '18' => esc_html__('Style 18', 'ultimate-store-kit'),
759 'circle-1' => esc_html__('Style 19', 'ultimate-store-kit'),
760 'circle-2' => esc_html__('Style 20', 'ultimate-store-kit'),
761 'circle-3' => esc_html__('Style 21', 'ultimate-store-kit'),
762 'circle-4' => esc_html__('Style 22', 'ultimate-store-kit'),
763 'square-1' => esc_html__('Style 23', 'ultimate-store-kit'),
764 ],
765 ]
766 );
767
768 $this->start_controls_tabs('tabs_navigation_arrows_style');
769
770 $this->start_controls_tab(
771 'tabs_nav_arrows_normal',
772 [
773 'label' => __('Normal', 'ultimate-store-kit'),
774 ]
775 );
776
777 $this->add_control(
778 'arrows_color',
779 [
780 'label' => __('Color', 'ultimate-store-kit'),
781 'type' => Controls_Manager::COLOR,
782 'selectors' => [
783 '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn' => 'color: {{VALUE}}',
784 ],
785 ]
786 );
787
788 $this->add_group_control(
789 Group_Control_Background::get_type(),
790 [
791 'name' => 'arrows_background',
792 'label' => esc_html__('Background', 'ultimate-store-kit'),
793 'types' => ['classic', 'gradient'],
794 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn',
795 ]
796 );
797
798 $this->add_group_control(
799 Group_Control_Border::get_type(),
800 [
801 'name' => 'nav_arrows_border',
802 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn',
803 'separator' => 'before',
804 ]
805 );
806
807 $this->add_responsive_control(
808 'border_radius',
809 [
810 'label' => __('Border Radius', 'ultimate-store-kit'),
811 'type' => Controls_Manager::DIMENSIONS,
812 'size_units' => ['px', '%'],
813 'selectors' => [
814 '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
815 ],
816 ]
817 );
818
819 $this->add_responsive_control(
820 'arrows_padding',
821 [
822 'label' => esc_html__('Padding', 'ultimate-store-kit'),
823 'type' => Controls_Manager::DIMENSIONS,
824 'size_units' => ['px', 'em', '%'],
825 'selectors' => [
826 '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
827 ],
828 ]
829 );
830
831 $this->add_responsive_control(
832 'arrows_margin',
833 [
834 'label' => esc_html__('Margin', 'ultimate-store-kit'),
835 'type' => Controls_Manager::DIMENSIONS,
836 'size_units' => ['px', 'em', '%'],
837 'selectors' => [
838 '{{WRAPPER}} .usk-heaven-slider .usk-navigation-wrap' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
839 ],
840 ]
841 );
842
843 $this->add_responsive_control(
844 'arrows_size',
845 [
846 'label' => __('Size', 'ultimate-store-kit'),
847 'type' => Controls_Manager::SLIDER,
848 'range' => [
849 'px' => [
850 'min' => 10,
851 'max' => 100,
852 ],
853 ],
854 'selectors' => [
855 '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn' => 'font-size: {{SIZE || 18}}{{UNIT}};',
856 ],
857 ]
858 );
859
860 $this->add_responsive_control(
861 'arrows_space',
862 [
863 'label' => __('Space Between Arrows', 'ultimate-store-kit'),
864 'type' => Controls_Manager::SLIDER,
865 'range' => [
866 'px' => [
867 'min' => 0,
868 'max' => 100,
869 ],
870 ],
871 'selectors' => [
872 '{{WRAPPER}} .usk-heaven-slider .usk-navigation-wrap' => 'grid-column-gap: {{SIZE}}px;',
873 ],
874 ]
875 );
876
877 $this->end_controls_tab();
878
879 $this->start_controls_tab(
880 'tabs_nav_arrows_hover',
881 [
882 'label' => __('Hover', 'ultimate-store-kit'),
883 ]
884 );
885
886 $this->add_control(
887 'arrows_hover_color',
888 [
889 'label' => __('Color', 'ultimate-store-kit'),
890 'type' => Controls_Manager::COLOR,
891 'selectors' => [
892 '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn:hover' => 'color: {{VALUE}}',
893 ],
894 ]
895 );
896
897 $this->add_group_control(
898 Group_Control_Background::get_type(),
899 [
900 'name' => 'arrows_hover_background',
901 'label' => esc_html__('Background', 'ultimate-store-kit'),
902 'types' => ['classic', 'gradient'],
903 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn:hover',
904 ]
905 );
906
907 $this->add_control(
908 'nav_arrows_hover_border_color',
909 [
910 'label' => __('Border Color', 'ultimate-store-kit'),
911 'type' => Controls_Manager::COLOR,
912 'selectors' => [
913 '{{WRAPPER}} .usk-heaven-slider .usk-nav-btn:hover' => 'border-color: {{VALUE}};',
914 ],
915 ]
916 );
917
918 $this->end_controls_tab();
919
920 $this->end_controls_tabs();
921
922 $this->end_controls_section();
923
924 $this->start_controls_section(
925 'section_style_thumbs_slide',
926 [
927 'label' => esc_html__('Thumbs', 'ultimate-store-kit'),
928 'tab' => Controls_Manager::TAB_STYLE,
929 'condition' => [
930 'show_thumbs' => 'yes',
931 ],
932 ]
933 );
934
935 $this->start_controls_tabs('tabs_thumbs_style');
936
937 $this->start_controls_tab(
938 'tabs_thumbs_normal',
939 [
940 'label' => __('Normal', 'ultimate-store-kit'),
941 ]
942 );
943
944 $this->add_group_control(
945 Group_Control_Background::get_type(),
946 [
947 'name' => 'thumbs_items_background',
948 'label' => esc_html__('Background', 'ultimate-store-kit'),
949 'types' => ['classic', 'gradient'],
950 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-thumbs-slider .usk-item:before',
951 ]
952 );
953
954 $this->add_group_control(
955 Group_Control_Border::get_type(),
956 [
957 'name' => 'thumbs_items_border',
958 'label' => __('Border', 'ultimate-store-kit'),
959 'fields_options' => [
960 'border' => [
961 'default' => 'solid',
962 ],
963 'width' => [
964 'default' => [
965 'top' => '1',
966 'right' => '1',
967 'bottom' => '1',
968 'left' => '1',
969 'isLinked' => false,
970 ],
971 ],
972 'color' => [
973 'default' => '#e8e8ea',
974 ],
975 ],
976 'selector' => '{{WRAPPER}} .usk-heaven-slider .usk-thumbs-slider .usk-item:before',
977 'separator' => 'before',
978 ]
979 );
980
981 $this->add_responsive_control(
982 'thumbs_items_radius',
983 [
984 'label' => esc_html__('Border Radius', 'ultimate-store-kit'),
985 'type' => Controls_Manager::DIMENSIONS,
986 'size_units' => ['px'],
987 'selectors' => [
988 '{{WRAPPER}} .usk-heaven-slider .usk-thumbs-slider .usk-item:before' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}; overflow: hidden;',
989 ],
990 ]
991 );
992
993 $this->end_controls_tab();
994
995 $this->start_controls_tab(
996 'tabs_thumbs_hover',
997 [
998 'label' => __('Hover', 'ultimate-store-kit'),
999 ]
1000 );
1001
1002 $this->add_control(
1003 'thumbs_items_hover_border_color',
1004 [
1005 'label' => __('Border Color', 'ultimate-store-kit'),
1006 'type' => Controls_Manager::COLOR,
1007 'default' => '#5bb300',
1008 'selectors' => [
1009 '{{WRAPPER}} .usk-heaven-slider .usk-thumbs-slider .usk-item:hover::before' => 'border-color: {{VALUE}};',
1010 ],
1011 'condition' => [
1012 'thumbs_items_border_border!' => '',
1013 ],
1014 ]
1015 );
1016
1017 $this->end_controls_tab();
1018
1019 $this->start_controls_tab(
1020 'tabs_thumbs_active',
1021 [
1022 'label' => __('Active', 'ultimate-store-kit'),
1023 ]
1024 );
1025
1026 $this->add_control(
1027 'thumbs_items_active_border_color',
1028 [
1029 'label' => __('Border Color', 'ultimate-store-kit'),
1030 'type' => Controls_Manager::COLOR,
1031 'default' => '#5bb300',
1032 'selectors' => [
1033 '{{WRAPPER}} .usk-heaven-slider .usk-thumbs-slider .usk-item.swiper-slide-active::before' => 'border-color: {{VALUE}};',
1034 ],
1035 'condition' => [
1036 'thumbs_items_border_border!' => '',
1037 ],
1038 ]
1039 );
1040
1041 $this->end_controls_tab();
1042
1043 $this->end_controls_tabs();
1044
1045 $this->end_controls_section();
1046 }
1047
1048 public function render_image() {
1049 global $product;
1050 $settings = $this->get_settings_for_display();
1051 $product_image = wp_get_attachment_image_url(get_post_thumbnail_id(), $settings['image_size']);
1052
1053 // if product image is empty, use placeholder
1054 if (empty($product_image)) {
1055 $product_image = wc_placeholder_img_src('full');
1056 }
1057 ?>
1058 <div class="usk-image-wrap">
1059 <img class="usk-img" src="<?php echo esc_url($product_image); ?>" alt="<?php echo esc_attr(get_the_title()); ?>">
1060 </div>
1061 <?php
1062 }
1063
1064 public function render_slider_header() {
1065 $settings = $this->get_settings_for_display();
1066 $this->add_render_attribute('slider', 'class', ['usk-heaven-slider']);
1067 $id = 'ultimate-store-kit-' . $this->get_id();
1068
1069 $this->add_render_attribute('slider', 'id', $id);
1070
1071 $this->add_render_attribute(
1072 [
1073 'slider' => [
1074 'data-settings' => [
1075 wp_json_encode(array_filter([
1076 "autoplay" => ("yes" == $settings["autoplay"]) ? ["delay" => $settings["autoplay_speed"]] : false,
1077 "loop" => ($settings["loop"] == "yes") ? true : false,
1078 "speed" => $settings["speed"]["size"],
1079 "pauseOnHover" => ("yes" == $settings["pauseonhover"]) ? true : false,
1080 "grabCursor" => ($settings["grab_cursor"] === "yes") ? true : false,
1081 "effect" => 'fade',
1082 "fadeEffect" => ['crossFade' => true],
1083 "lazy" => true,
1084 "mousewheel" => ($settings["mousewheel"]) ? true : false,
1085 "observer" => ($settings["observer"]) ? true : false,
1086 "observeParents" => ($settings["observer"]) ? true : false,
1087 "slidesPerView" => 1,
1088 "loopedSlides" => 4,
1089 "navigation" => [
1090 "nextEl" => "#" . $id . " .usk-button-next",
1091 "prevEl" => "#" . $id . " .usk-button-prev",
1092 ],
1093 "lazy" => [
1094 "loadPrevNext" => "true",
1095 ],
1096
1097 ])),
1098 ],
1099 ],
1100 ]
1101 );
1102 ?>
1103 <div class="ultimate-store-kit">
1104 <div <?php $this->print_render_attribute_string('slider'); ?>>
1105 <div class="swiper usk-main-slider">
1106 <div class="swiper-wrapper">
1107 <?php
1108 }
1109
1110 public function render_slider_footer() {
1111 $settings = $this->get_settings_for_display();
1112 ?>
1113 </div>
1114 </div>
1115
1116 <?php if ($settings['show_arrows']): ?>
1117 <div class="usk-navigation-wrap" style="direction:ltr;">
1118 <div class="usk-nav-btn usk-button-next">
1119 <i class="usk-icon-arrow-right-<?php echo esc_attr($settings['nav_arrows_icon']); ?>"
1120 aria-hidden="true"></i>
1121 </div>
1122 <div class="usk-nav-btn usk-button-prev">
1123 <i class="usk-icon-arrow-left-<?php echo esc_attr($settings['nav_arrows_icon']); ?>"
1124 aria-hidden="true"></i>
1125 </div>
1126 </div>
1127 <?php endif; ?>
1128
1129 <!-- thumbsslider -->
1130 <?php if ($settings['show_thumbs']): ?>
1131 <div thumbsSlider="" class="usk-thumbs-slider swiper">
1132 <div class="swiper-wrapper">
1133 <?php $this->render_thumbs_item(); ?>
1134 </div>
1135 </div>
1136 <?php endif; ?>
1137 <!-- thumbsslider -->
1138 </div>
1139 </div>
1140 <?php
1141 }
1142
1143 public function print_price_output($output) {
1144 $tags = [
1145 'del' => ['aria-hidden' => []],
1146 'span' => ['class' => []],
1147 'bdi' => [],
1148 'ins' => [],
1149 ];
1150
1151 if (isset($output)) {
1152 echo wp_kses($output, $tags);
1153 }
1154 }
1155
1156 public function render_loop_item() {
1157 $settings = $this->get_settings_for_display();
1158 $id = 'usk-wc-product-' . $this->get_id();
1159 $modal_id = wp_unique_id('modal-id-');
1160
1161 // $wp_query = $this->render_query();
1162 $this->query_product();
1163 $wp_query = $this->get_query();
1164 if ($wp_query->have_posts()) { ?>
1165 <?php while ($wp_query->have_posts()):
1166 $wp_query->the_post();
1167 global $product;
1168 $tooltip_position = 'top';
1169
1170 $rating_count = $product->get_rating_count();
1171 $average = $product->get_average_rating();
1172 if ($settings['show_rating'] == 'yes') {
1173 $this->add_render_attribute('usk-item', 'class', ['usk-item swiper-slide', 'usk-have-rating'], true);
1174 } else {
1175 $this->add_render_attribute('usk-item', 'class', ['usk-item swiper-slide'], true);
1176 }
1177
1178 ?>
1179 <div <?php $this->print_render_attribute_string('usk-item'); ?>>
1180 <div class="usk-item-box">
1181 <?php $this->render_image(); ?>
1182 <div class="usk-content">
1183
1184 <div class="usk-badge-label-wrapper">
1185 <div class="usk-badge-label-content usk-flex">
1186 <?php $this->register_global_template_badge_label($settings); ?>
1187 </div>
1188 </div>
1189
1190 <div>
1191
1192 <?php if ('yes' === $settings['show_category']) : ?>
1193 <div class="usk-category">
1194 <?php echo wp_kses_post(wc_get_product_category_list($product->get_id(), ' ')); ?>
1195 </div>
1196 <?php endif; ?>
1197
1198 <?php if ('yes' == $settings['show_title']):
1199 printf(
1200 '<%1$s class="usk-title"><a href="%2$s">%3$s</a></%1$s>',
1201 esc_attr(Utils::get_valid_html_tag($settings['title_tags'])),
1202 esc_url($product->get_permalink()),
1203 esc_html($product->get_title())
1204 );
1205 endif; ?>
1206
1207 <?php if ('yes' == $settings['show_excerpt']): ?>
1208 <div class="usk-text">
1209 <?php echo wp_kses_post(wp_trim_words($product->get_short_description(), $settings['excerpt_limit'], '...')); ?>
1210 </div>
1211 <?php endif; ?>
1212
1213 <?php if ('yes' == $settings['show_price']): ?>
1214 <div class="usk-price">
1215 <?php $this->print_price_output($product->get_price_html()); ?>
1216 </div>
1217 <?php endif; ?>
1218
1219 <?php if ('yes' == $settings['show_rating']): ?>
1220 <div class="usk-rating">
1221 <span><?php echo wp_kses_post($this->register_global_template_wc_rating($average, $rating_count)); ?></span>
1222 </div>
1223 <?php endif; ?>
1224
1225 <?php if ('yes' == $settings['show_cart'] or 'yes' == $settings['show_wishlist'] or 'yes' == $settings['show_quick_view']): ?>
1226 <div class="usk-shoping">
1227 <?php
1228 $this->register_global_template_add_to_wishlist($tooltip_position, $settings);
1229 $this->register_global_template_add_to_compare($tooltip_position, $settings);
1230 $this->register_global_template_quick_view($product->get_id(), $tooltip_position, $settings);
1231 $this->register_global_template_add_to_cart($tooltip_position, $settings);
1232 ?>
1233 </div>
1234 <?php endif; ?>
1235 </div>
1236
1237 </div>
1238 </div>
1239 </div>
1240 <?php endwhile;
1241 wp_reset_postdata();
1242 } else {
1243 echo '<div class="usk-alert-warning" usk-alert>' . esc_html__('Ops! There no product to display.', 'ultimate-store-kit') . '</div>';
1244 }
1245 }
1246
1247 public function render_thumbs_item() {
1248 $settings = $this->get_settings_for_display();
1249 $this->query_product();
1250 $wp_query = $this->get_query();
1251 if ($wp_query->have_posts()) { ?>
1252 <?php while ($wp_query->have_posts()):
1253 $wp_query->the_post();
1254 global $product;
1255
1256 ?>
1257 <div class="swiper-slide usk-item">
1258 <div class="usk-item-box">
1259 <?php $this->render_image(); ?>
1260 </div>
1261 </div>
1262 <?php endwhile;
1263 wp_reset_postdata();
1264 } else {
1265 echo '<div class="usk-alert-warning" usk-alert>' . esc_html__('Ops! There no product to display.', 'ultimate-store-kit') . '</div>';
1266 }
1267 }
1268
1269 public function render() {
1270 $this->render_slider_header();
1271 $this->render_loop_item();
1272 $this->render_slider_footer();
1273 }
1274 public function query_product() {
1275 $default = $this->getGroupControlQueryArgs();
1276 $this->_query = $this->build_query_from_args($default);
1277 }
1278 }
1279