PluginProbe
Ultimate Post Kit – Elementor Post Grid, Post Carousel, Post Slider & Blog Layout Widgets / 4.1.2
Ultimate Post Kit – Elementor Post Grid, Post Carousel, Post Slider & Blog Layout Widgets v4.1.2
4.5.6 4.5.5 4.5.4 4.2.1 4.2.2 4.2.3 4.5.0 4.5.2 4.5.3 4.2.0 4.1.18 4.1.17 4.1.16 4.1.15 4.1.14 4.1.13 4.1.12 4.1.11 4.1.10 4.1.9 4.1.8 4.0.9 4.1.0 4.1.1 4.1.2 All 148 releases
ultimate-post-kit / modules / post-accordion / widgets / post-accordion.php

post-accordion.php in Ultimate Post Kit – Elementor Post Grid, Post Carousel, Post Slider & Blog Layout Widgets 4.1.2, at modules/post-accordion/widgets/post-accordion.php

1,241 lines 32.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace UltimatePostKit\Modules\PostAccordion\Widgets;
4
5 use Elementor\Controls_Manager;
6 use Elementor\Group_Control_Border;
7 use Elementor\Group_Control_Box_Shadow;
8 use Elementor\Group_Control_Typography;
9 use Elementor\Group_Control_Text_Shadow;
10 use Elementor\Group_Control_Image_Size;
11 use Elementor\Group_Control_Background;
12 use UltimatePostKit\Utils;
13
14 use UltimatePostKit\Traits\Global_Widget_Controls;
15 use UltimatePostKit\Traits\Global_Widget_Functions;
16 use UltimatePostKit\Includes\Controls\GroupQuery\Group_Control_Query;
17 use WP_Query;
18
19 if (!defined('ABSPATH')) exit; // Exit if accessed directly
20
21 class Post_Accordion extends Group_Control_Query {
22
23 use Global_Widget_Controls;
24 use Global_Widget_Functions;
25
26 private $_query = null;
27
28 public function get_name() {
29 return 'upk-post-accordion';
30 }
31
32 public function get_title() {
33 return BDTUPK . esc_html__('Post Accordion', 'ultimate-post-kit');
34 }
35
36 public function get_icon() {
37 return 'upk-widget-icon upk-icon-post-accordion';
38 }
39
40 public function get_categories() {
41 return ['ultimate-post-kit'];
42 }
43
44 public function get_keywords() {
45 return ['post', 'grid', 'blog', 'recent', 'news', 'accordion'];
46 }
47
48 public function get_style_depends() {
49 if ($this->upk_is_edit_mode()) {
50 return ['upk-all-styles'];
51 } else {
52 return ['upk-font', 'upk-post-accordion'];
53 }
54 }
55
56 public function get_custom_help_url() {
57 return 'https://youtu.be/lxGeTthE_lA';
58 }
59
60 public function get_query() {
61 return $this->_query;
62 }
63
64 public function has_widget_inner_wrapper(): bool {
65 return ! \Elementor\Plugin::$instance->experiments->is_feature_active( 'e_optimized_markup' );
66 }
67
68
69 protected function register_controls() {
70 $this->start_controls_section(
71 'section_content_layout',
72 [
73 'label' => esc_html__('Layout', 'ultimate-post-kit'),
74 ]
75 );
76
77 $this->add_control(
78 'layout_style',
79 [
80 'label' => __('Layout Style', 'ultimate-post-kit'),
81 'type' => Controls_Manager::SELECT,
82 'default' => 'style-1',
83 'options' => [
84 'style-1' => 'Horizontal',
85 'style-2' => 'Vertical',
86 ],
87 ]
88 );
89
90 $this->add_control(
91 'layout_content_style',
92 [
93 'label' => __('Content Style', 'ultimate-post-kit'),
94 'type' => Controls_Manager::SELECT,
95 'default' => 'style-1',
96 'options' => [
97 'style-1' => '01',
98 'style-2' => '02',
99 ],
100 ]
101 );
102
103 $this->add_responsive_control(
104 'default_item_height',
105 [
106 'label' => esc_html__('Height(px)', 'ultimate-post-kit'),
107 'type' => Controls_Manager::SLIDER,
108 'range' => [
109 'px' => [
110 'min' => 200,
111 'max' => 1200,
112 ],
113 ],
114 'selectors' => [
115 '{{WRAPPER}} .upk-accordion-wrapper' => 'height: {{SIZE}}{{UNIT}};',
116 ],
117 ]
118 );
119
120 $this->add_responsive_control(
121 'default_item_gap',
122 [
123 'label' => esc_html__('Item Gap', 'ultimate-post-kit'),
124 'type' => Controls_Manager::SLIDER,
125 'range' => [
126 'px' => [
127 'min' => 0,
128 'max' => 50,
129 ],
130 ],
131 'selectors' => [
132 '{{WRAPPER}} .upk-accordion-wrapper' => 'gap: {{SIZE}}{{UNIT}};',
133 ],
134 ]
135 );
136
137
138 $this->add_responsive_control(
139 'default_item_expand',
140 [
141 'label' => esc_html__('Item Hover Expand', 'ultimate-post-kit'),
142 'type' => Controls_Manager::SLIDER,
143 'range' => [
144 'px' => [
145 'min' => 2,
146 'max' => 10,
147 ],
148 ],
149 'selectors' => [
150 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item:hover' => 'flex: {{SIZE}};',
151 ],
152 ]
153 );
154
155 $this->add_group_control(
156 Group_Control_Image_Size::get_type(),
157 [
158 'name' => 'primary_thumbnail',
159 'exclude' => ['custom'],
160 'default' => 'large',
161 ]
162 );
163
164 $this->end_controls_section();
165
166 // Query Settings
167 $this->start_controls_section(
168 'section_post_query_builder',
169 [
170 'label' => __('Query', 'ultimate-post-kit'),
171 'tab' => Controls_Manager::TAB_CONTENT,
172 ]
173 );
174
175 $this->add_control(
176 'item_limit',
177 [
178 'label' => esc_html__('Item Limit', 'ultimate-post-kit'),
179 'type' => Controls_Manager::SLIDER,
180 'range' => [
181 'px' => [
182 'min' => 1,
183 'max' => 12,
184 ],
185 ],
186 'default' => [
187 'size' => 3,
188 ],
189 ]
190 );
191
192 $this->register_query_builder_controls();
193
194 $this->end_controls_section();
195
196 $this->start_controls_section(
197 'section_content_additional',
198 [
199 'label' => esc_html__('Additional', 'ultimate-post-kit'),
200 ]
201 );
202
203 //Global Title Controls
204 $this->register_title_controls();
205
206 $this->add_control(
207 'show_excerpt',
208 [
209 'label' => esc_html__('Show Text', 'ultimate-post-kit'),
210 'type' => Controls_Manager::SWITCHER,
211 'separator' => 'before',
212 'condition' => [
213 'layout_style' => 'style-1'
214 ],
215 ]
216
217 );
218
219 $this->add_control(
220 'excerpt_length',
221 [
222 'label' => esc_html__('Text Limit', 'ultimate-post-kit'),
223 'description' => esc_html__('It\'s just work for main content, but not working with excerpt. If you set 0 so you will get full main content.', 'ultimate-post-kit'),
224 'type' => Controls_Manager::NUMBER,
225 'default' => 15,
226 'condition' => [
227 'show_excerpt' => 'yes'
228 ],
229 ]
230 );
231
232 $this->add_control(
233 'strip_shortcode',
234 [
235 'label' => esc_html__('Strip Shortcode', 'ultimate-post-kit'),
236 'type' => Controls_Manager::SWITCHER,
237 'default' => 'yes',
238 'condition' => [
239 'show_excerpt' => 'yes',
240 ],
241 ]
242 );
243
244 $this->add_control(
245 'show_author',
246 [
247 'label' => esc_html__('Show Author', 'ultimate-post-kit'),
248 'type' => Controls_Manager::SWITCHER,
249 'separator' => 'before'
250 ]
251 );
252
253 $this->add_control(
254 'show_category',
255 [
256 'label' => esc_html__('Show Category', 'ultimate-post-kit'),
257 'type' => Controls_Manager::SWITCHER,
258 'default' => 'yes',
259 ]
260 );
261
262 $this->add_control(
263 'show_comments',
264 [
265 'label' => esc_html__('Show Comments', 'ultimate-post-kit'),
266 'type' => Controls_Manager::SWITCHER,
267 'default' => 'yes',
268 ]
269 );
270
271 //Global Date Controls
272 $this->register_date_controls();
273
274 //Global Reading Time Controls
275 $this->register_reading_time_controls();
276
277 $this->add_control(
278 'meta_separator',
279 [
280 'label' => __('Separator', 'ultimate-post-kit'),
281 'type' => Controls_Manager::TEXT,
282 'default' => '.',
283 'label_block' => false,
284 ]
285 );
286
287 $this->add_control(
288 'show_pagination',
289 [
290 'label' => esc_html__('Pagination', 'ultimate-post-kit'),
291 'type' => Controls_Manager::SWITCHER,
292 'separator' => 'before'
293 ]
294 );
295
296 $this->add_control(
297 'global_link',
298 [
299 'label' => __('Item Wrapper Link', 'ultimate-post-kit'),
300 'type' => Controls_Manager::SWITCHER,
301 'prefix_class' => 'upk-global-link-',
302 'description' => __('Be aware! When Item Wrapper Link activated then title link and read more link will not work', 'ultimate-post-kit'),
303 ]
304 );
305
306 $this->end_controls_section();
307
308 //Style
309 $this->start_controls_section(
310 'upk_section_style',
311 [
312 'label' => esc_html__('Items', 'ultimate-post-kit'),
313 'tab' => Controls_Manager::TAB_STYLE,
314 ]
315 );
316
317 $this->add_responsive_control (
318 'content_width',
319 [
320 'label' => __('Content Width', 'ultimate-post-kit'),
321 'type' => Controls_Manager::SLIDER,
322 'range' => [
323 'px' => [
324 'min' => 100,
325 'max' => 600,
326 ],
327 ],
328 'selectors' => [
329 '(desktop){{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content' => 'width: {{SIZE}}px;',
330 '(tablet){{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content' => 'width: 100%;',
331 '(mobile){{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content' => 'width: 100%;'
332 ],
333 ]
334 );
335
336 $this->add_responsive_control(
337 'content_padding',
338 [
339 'label' => __('Content Padding', 'ultimate-post-kit'),
340 'type' => Controls_Manager::DIMENSIONS,
341 'size_units' => ['px', 'em', '%'],
342 'selectors' => [
343 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
344 ],
345 ]
346 );
347
348 $this->add_group_control(
349 Group_Control_Border::get_type(),
350 [
351 'name' => 'item_border',
352 'label' => __('Border', 'ultimate-post-kit'),
353 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item',
354 ]
355 );
356
357 $this->add_responsive_control(
358 'item_border_radius',
359 [
360 'label' => __('Border Radius', 'ultimate-post-kit'),
361 'type' => Controls_Manager::DIMENSIONS,
362 'size_units' => ['px', '%'],
363 'selectors' => [
364 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
365 ],
366 ]
367 );
368
369 $this->start_controls_tabs('tabs_item_style');
370
371 $this->start_controls_tab(
372 'tab_item_normal',
373 [
374 'label' => esc_html__('Normal', 'ultimate-post-kit'),
375 ]
376 );
377
378 $this->add_control(
379 'overlay_blur_effect',
380 [
381 'label' => esc_html__('Glassmorphism', 'ultimate-post-kit'),
382 'type' => Controls_Manager::SWITCHER,
383 // translators: %1s: Opening anchor tag with link to MDN backdrop-filter documentation, %2s: Closing anchor tag
384 'description' => sprintf(__('This feature will not work in the Firefox browser untill you enable browser compatibility so please %1s look here %2s', 'ultimate-post-kit'), '<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility" target="_blank">', '</a>'),
385 ]
386 );
387
388 $this->add_control(
389 'overlay_blur_level',
390 [
391 'label' => __('Blur Level', 'ultimate-post-kit'),
392 'type' => Controls_Manager::SLIDER,
393 'range' => [
394 'px' => [
395 'min' => 0,
396 'step' => 1,
397 'max' => 50,
398 ]
399 ],
400 'default' => [
401 'size' => 5
402 ],
403 'selectors' => [
404 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-item-box::before' => 'backdrop-filter: blur({{SIZE}}px); -webkit-backdrop-filter: blur({{SIZE}}px);'
405 ],
406 'condition' => [
407 'overlay_blur_effect' => 'yes'
408 ]
409 ]
410 );
411
412 $this->add_control(
413 'overlay_color',
414 [
415 'label' => esc_html__('Overlay Color', 'ultimate-post-kit'),
416 'type' => Controls_Manager::COLOR,
417 'selectors' => [
418 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-item-box::before' => 'background: {{VALUE}};',
419 ],
420 ]
421 );
422
423 $this->end_controls_tab();
424
425 $this->start_controls_tab(
426 'tab_item_hover',
427 [
428 'label' => esc_html__('Hover', 'ultimate-post-kit'),
429 ]
430 );
431
432 $this->add_control(
433 'overlay_blur_level_hover',
434 [
435 'label' => __('Blur Level', 'ultimate-post-kit'),
436 'type' => Controls_Manager::SLIDER,
437 'range' => [
438 'px' => [
439 'min' => 0,
440 'step' => 1,
441 'max' => 50,
442 ]
443 ],
444 'default' => [
445 'size' => 0
446 ],
447 'selectors' => [
448 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item:hover .upk-accordion-item-box::before' => 'backdrop-filter: blur({{SIZE}}px); -webkit-backdrop-filter: blur({{SIZE}}px);'
449 ],
450 'condition' => [
451 'overlay_blur_effect' => 'yes'
452 ]
453 ]
454 );
455
456 $this->add_control(
457 'overlay_color_hover',
458 [
459 'label' => esc_html__('Overlay Color', 'ultimate-post-kit'),
460 'type' => Controls_Manager::COLOR,
461 'selectors' => [
462 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item:hover .upk-accordion-item-box::before' => 'background: {{VALUE}};',
463 ],
464 ]
465 );
466
467 $this->end_controls_tab();
468
469 $this->end_controls_tabs();
470
471 $this->end_controls_section();
472
473 $this->start_controls_section(
474 'section_style_title',
475 [
476 'label' => esc_html__('Title', 'ultimate-post-kit'),
477 'tab' => Controls_Manager::TAB_STYLE,
478 'condition' => [
479 'show_title' => 'yes',
480 ],
481 ]
482 );
483
484 $this->add_control(
485 'title_style',
486 [
487 'label' => esc_html__('Style', 'ultimate-post-kit') . BDTUPK_NC,
488 'type' => Controls_Manager::SELECT,
489 'default' => '',
490 'options' => [
491 '' => esc_html__('Default', 'ultimate-post-kit'),
492 'underline' => esc_html__('Underline', 'ultimate-post-kit'),
493 'middle-underline' => esc_html__('Middle Underline', 'ultimate-post-kit'),
494 'overline' => esc_html__('Overline', 'ultimate-post-kit'),
495 'middle-overline' => esc_html__('Middle Overline', 'ultimate-post-kit'),
496 ],
497 'condition' => [
498 'layout_content_style' => 'style-1',
499 ],
500 ]
501 );
502
503 $this->add_control(
504 'title_color',
505 [
506 'label' => esc_html__('Color', 'ultimate-post-kit'),
507 'type' => Controls_Manager::COLOR,
508 'selectors' => [
509 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-title a' => 'color: {{VALUE}};',
510 ],
511 ]
512 );
513
514 $this->add_control(
515 'title_color_hover',
516 [
517 'label' => esc_html__('Hover Color', 'ultimate-post-kit'),
518 'type' => Controls_Manager::COLOR,
519 'selectors' => [
520 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-title a:hover' => 'color: {{VALUE}};',
521 ],
522 ]
523 );
524
525 $this->add_group_control(
526 Group_Control_Typography::get_type(),
527 [
528 'name' => 'title_typography',
529 'label' => esc_html__('Typography', 'ultimate-post-kit'),
530 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-title',
531 ]
532 );
533
534 $this->add_group_control(
535 Group_Control_Text_Shadow::get_type(),
536 [
537 'name' => 'title_text_shadow',
538 'label' => __('Text Shadow', 'ultimate-post-kit'),
539 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-title',
540 ]
541 );
542
543 $this->add_responsive_control(
544 'title_spacing',
545 [
546 'label' => __('Spacing', 'ultimate-post-kit'),
547 'type' => Controls_Manager::SLIDER,
548 'range' => [
549 'px' => [
550 'min' => 0,
551 'max' => 50,
552 ],
553 ],
554 'selectors' => [
555 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-title' => 'margin-bottom: {{SIZE}}px;'
556 ],
557 ]
558 );
559
560 $this->end_controls_section();
561
562 $this->start_controls_section(
563 'section_style_text',
564 [
565 'label' => esc_html__('Text', 'ultimate-post-kit'),
566 'tab' => Controls_Manager::TAB_STYLE,
567 'condition' => [
568 'show_excerpt' => 'yes',
569 ],
570 ]
571 );
572
573 $this->add_control(
574 'text_color',
575 [
576 'label' => esc_html__('Color', 'ultimate-post-kit'),
577 'type' => Controls_Manager::COLOR,
578 'selectors' => [
579 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-text' => 'color: {{VALUE}};',
580 ],
581 ]
582 );
583
584 $this->add_group_control(
585 Group_Control_Typography::get_type(),
586 [
587 'name' => 'text_typography',
588 'label' => esc_html__('Typography', 'ultimate-post-kit'),
589 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-text',
590 ]
591 );
592
593 $this->add_responsive_control(
594 'text_spacing',
595 [
596 'label' => __('Spacing', 'ultimate-post-kit'),
597 'type' => Controls_Manager::SLIDER,
598 'range' => [
599 'px' => [
600 'min' => 0,
601 'max' => 50,
602 ],
603 ],
604 'selectors' => [
605 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-text' => 'margin-bottom: {{SIZE}}px;'
606 ],
607 ]
608 );
609
610 $this->end_controls_section();
611
612 $this->start_controls_section(
613 'section_style_category',
614 [
615 'label' => esc_html__('Category', 'ultimate-post-kit'),
616 'tab' => Controls_Manager::TAB_STYLE,
617 'condition' => [
618 'show_category' => 'yes'
619 ],
620 ]
621 );
622
623 $this->add_responsive_control(
624 'category_bottom_spacing',
625 [
626 'label' => esc_html__('Spacing', 'ultimate-post-kit'),
627 'type' => Controls_Manager::SLIDER,
628 'range' => [
629 'px' => [
630 'min' => 0,
631 'max' => 50,
632 ],
633 ],
634 'selectors' => [
635 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category' => 'margin-bottom: {{SIZE}}{{UNIT}};',
636 ],
637 ]
638 );
639
640 $this->start_controls_tabs('tabs_category_style');
641
642 $this->start_controls_tab(
643 'tab_category_normal',
644 [
645 'label' => esc_html__('Normal', 'ultimate-post-kit'),
646 ]
647 );
648
649 $this->add_control(
650 'category_color',
651 [
652 'label' => esc_html__('Color', 'ultimate-post-kit'),
653 'type' => Controls_Manager::COLOR,
654 'selectors' => [
655 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a::before' => 'color: {{VALUE}};',
656 ],
657 ]
658 );
659
660 $this->add_group_control(
661 Group_Control_Background::get_type(),
662 [
663 'name' => 'category_background',
664 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a::before',
665 ]
666 );
667
668 $this->add_group_control(
669 Group_Control_Border::get_type(),
670 [
671 'name' => 'category_border',
672 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a::before',
673 ]
674 );
675
676 $this->add_responsive_control(
677 'category_border_radius',
678 [
679 'label' => esc_html__('Border Radius', 'ultimate-post-kit'),
680 'type' => Controls_Manager::DIMENSIONS,
681 'size_units' => ['px', '%'],
682 'selectors' => [
683 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a::before' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
684 ],
685 ]
686 );
687
688 $this->add_responsive_control(
689 'category_padding',
690 [
691 'label' => esc_html__('Padding', 'ultimate-post-kit'),
692 'type' => Controls_Manager::DIMENSIONS,
693 'size_units' => ['px', 'em', '%'],
694 'selectors' => [
695 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a::before' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
696 ],
697 ]
698 );
699
700 $this->add_responsive_control(
701 'category_space_between',
702 [
703 'label' => esc_html__('Space Between', 'ultimate-post-kit'),
704 'type' => Controls_Manager::SLIDER,
705 'range' => [
706 'px' => [
707 'min' => 0,
708 'max' => 50,
709 ],
710 ],
711 'selectors' => [
712 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a+a' => 'margin-left: {{SIZE}}{{UNIT}};',
713 ],
714 ]
715 );
716
717 $this->add_group_control(
718 Group_Control_Box_Shadow::get_type(),
719 [
720 'name' => 'category_shadow',
721 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a::before',
722 ]
723 );
724
725 $this->add_group_control(
726 Group_Control_Typography::get_type(),
727 [
728 'name' => 'category_typography',
729 'label' => esc_html__('Typography', 'ultimate-post-kit'),
730 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a::before',
731 ]
732 );
733
734 $this->end_controls_tab();
735
736 $this->start_controls_tab(
737 'tab_category_hover',
738 [
739 'label' => esc_html__('Hover', 'ultimate-post-kit'),
740 'condition' => [
741 'show_category' => 'yes'
742 ]
743 ]
744 );
745
746 $this->add_control(
747 'category_hover_color',
748 [
749 'label' => esc_html__('Color', 'ultimate-post-kit'),
750 'type' => Controls_Manager::COLOR,
751 'selectors' => [
752 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a:hover ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a:hover::before' => 'color: {{VALUE}};',
753 ],
754 ]
755 );
756
757 $this->add_group_control(
758 Group_Control_Background::get_type(),
759 [
760 'name' => 'category_hover_background',
761 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a:hover ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a:hover::before',
762 ]
763 );
764
765 $this->add_control(
766 'category_hover_border_color',
767 [
768 'label' => esc_html__('Border Color', 'ultimate-post-kit'),
769 'type' => Controls_Manager::COLOR,
770 'condition' => [
771 'category_border_border!' => '',
772 ],
773 'selectors' => [
774 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a:hover ,{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-category a:hover::before' => 'border-color: {{VALUE}};',
775 ],
776 ]
777 );
778
779 $this->end_controls_tab();
780
781 $this->end_controls_tabs();
782
783 $this->end_controls_section();
784
785 $this->start_controls_section(
786 'section_style_author',
787 [
788 'label' => esc_html__('Author', 'ultimate-post-kit'),
789 'tab' => Controls_Manager::TAB_STYLE,
790 'condition' => [
791 'show_author' => 'yes',
792 ],
793 ]
794 );
795
796 $this->add_control(
797 'author_image_heading',
798 [
799 'label' => esc_html__('Avatar', 'ultimate-post-kit'),
800 'type' => Controls_Manager::HEADING,
801 ]
802 );
803
804 $this->add_responsive_control(
805 'author_image_size',
806 [
807 'label' => esc_html__('Size', 'ultimate-post-kit'),
808 'type' => Controls_Manager::SLIDER,
809 'range' => [
810 'px' => [
811 'min' => 20,
812 'max' => 100,
813 ],
814 ],
815 'selectors' => [
816 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-img img' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
817 ],
818 ]
819 );
820
821 $this->add_responsive_control(
822 'author_image_spacing',
823 [
824 'label' => esc_html__('Spacing', 'ultimate-post-kit'),
825 'type' => Controls_Manager::SLIDER,
826 'range' => [
827 'px' => [
828 'min' => 0,
829 'max' => 50,
830 ],
831 ],
832 'selectors' => [
833 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-img img' => 'margin-right: {{SIZE}}{{UNIT}};',
834 ],
835 ]
836 );
837
838 $this->add_responsive_control(
839 'author_image_radius',
840 [
841 'label' => esc_html__('Border Radius', 'ultimate-post-kit'),
842 'type' => Controls_Manager::DIMENSIONS,
843 'size_units' => ['px', '%'],
844 'selectors' => [
845 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-img img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
846 ],
847 ]
848 );
849
850 $this->add_control(
851 'author_name_heading',
852 [
853 'label' => esc_html__('Name', 'ultimate-post-kit'),
854 'type' => Controls_Manager::HEADING,
855 'separator' => 'before'
856 ]
857 );
858
859 $this->add_control(
860 'author_name_color',
861 [
862 'label' => esc_html__('Color', 'ultimate-post-kit'),
863 'type' => Controls_Manager::COLOR,
864 'selectors' => [
865 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-name a' => 'color: {{VALUE}};',
866 ],
867 ]
868 );
869
870 $this->add_control(
871 'author_name_hover_color',
872 [
873 'label' => esc_html__('Hover Color', 'ultimate-post-kit'),
874 'type' => Controls_Manager::COLOR,
875 'selectors' => [
876 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-name a:hover' => 'color: {{VALUE}};',
877 ],
878 ]
879 );
880
881 $this->add_group_control(
882 Group_Control_Typography::get_type(),
883 [
884 'name' => 'author_name_typography',
885 'label' => esc_html__('Typography', 'ultimate-post-kit'),
886 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-name a',
887 ]
888 );
889
890 $this->add_control(
891 'author_role_heading',
892 [
893 'label' => esc_html__('Role', 'ultimate-post-kit'),
894 'type' => Controls_Manager::HEADING,
895 'separator' => 'before'
896 ]
897 );
898
899 $this->add_control(
900 'author_role_color',
901 [
902 'label' => esc_html__('Color', 'ultimate-post-kit'),
903 'type' => Controls_Manager::COLOR,
904 'selectors' => [
905 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-role' => 'color: {{VALUE}};',
906 ],
907 ]
908 );
909
910 $this->add_group_control(
911 Group_Control_Typography::get_type(),
912 [
913 'name' => 'author_role_typography',
914 'label' => esc_html__('Typography', 'ultimate-post-kit'),
915 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-role',
916 ]
917 );
918
919 $this->add_responsive_control(
920 'author_role_spacing',
921 [
922 'label' => esc_html__('Spacing', 'ultimate-post-kit'),
923 'type' => Controls_Manager::SLIDER,
924 'range' => [
925 'px' => [
926 'min' => 0,
927 'max' => 50,
928 ],
929 ],
930 'selectors' => [
931 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-author-role' => 'padding-top: {{SIZE}}{{UNIT}};',
932 ],
933 ]
934 );
935
936 $this->end_controls_section();
937
938 $this->start_controls_section(
939 'section_style_meta',
940 [
941 'label' => esc_html__('Meta', 'ultimate-post-kit'),
942 'tab' => Controls_Manager::TAB_STYLE,
943 'conditions' => [
944 'relation' => 'or',
945 'terms' => [
946 [
947 'name' => 'show_date',
948 'value' => 'yes'
949 ],
950 [
951 'name' => 'show_comments',
952 'value' => 'yes'
953 ]
954 ]
955 ],
956 ]
957 );
958
959 $this->add_control(
960 'meta_color',
961 [
962 'label' => esc_html__('Color', 'ultimate-post-kit'),
963 'type' => Controls_Manager::COLOR,
964 'selectors' => [
965 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-accordion-meta' => 'color: {{VALUE}};',
966 ],
967 ]
968 );
969
970 $this->add_group_control(
971 Group_Control_Typography::get_type(),
972 [
973 'name' => 'meta_typography',
974 'label' => esc_html__('Typography', 'ultimate-post-kit'),
975 'selector' => '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-accordion-meta',
976 ]
977 );
978
979 $this->add_responsive_control(
980 'meta_space_between',
981 [
982 'label' => esc_html__('Space Between', 'ultimate-post-kit'),
983 'type' => Controls_Manager::SLIDER,
984 'range' => [
985 'px' => [
986 'min' => 0,
987 'max' => 50,
988 ],
989 ],
990 'selectors' => [
991 '{{WRAPPER}} .upk-accordion-wrapper .upk-accordion-item .upk-accordion-content .upk-accordion-meta > div:before' => 'margin: 0 {{SIZE}}{{UNIT}};',
992 ],
993 ]
994 );
995
996 $this->end_controls_section();
997
998 //Global Pagination Controls
999 $this->register_pagination_controls();
1000 }
1001
1002 /**
1003 * Main query render for this widget
1004 * @param $posts_per_page number item query limit
1005 */
1006 public function query_posts($posts_per_page) {
1007
1008 $default = $this->getGroupControlQueryArgs();
1009 $args = [];
1010 if ($posts_per_page) {
1011 $args['posts_per_page'] = $posts_per_page;
1012 $args['paged'] = max(1, get_query_var('paged'), get_query_var('page'));
1013 }
1014 $args = array_merge($default, $args);
1015 $this->_query = new WP_Query($args);
1016 }
1017
1018 protected function _upk_get_category($post_type) {
1019 switch ($post_type) {
1020 case 'campaign':
1021 $taxonomy = 'campaign_category';
1022 break;
1023 case 'lightbox_library':
1024 $taxonomy = 'ngg_tag';
1025 break;
1026 case 'give_forms':
1027 $taxonomy = 'give_forms_category';
1028 break;
1029 case 'tribe_events':
1030 $taxonomy = 'tribe_events_cat';
1031 break;
1032 case 'product':
1033 $taxonomy = 'product_cat';
1034 break;
1035 default:
1036 $taxonomy = 'category';
1037 break;
1038 }
1039
1040 $categories = get_the_terms(get_the_ID(), $taxonomy);
1041 $_categories = [];
1042 if ($categories) {
1043 foreach ($categories as $category) {
1044 $link = '<a data-hover="' . $category->name . '" href="' . esc_url(get_category_link($category->term_id)) . '">' . $category->name . '</a>';
1045 $_categories[$category->slug] = $link;
1046 }
1047 }
1048 return implode(' ', $_categories);
1049 }
1050
1051 public function render_title() {
1052 $settings = $this->get_settings_for_display();
1053
1054 if (!$this->get_settings('show_title')) {
1055 return;
1056 }
1057
1058 printf(
1059 '<%1$s class="upk-title"><a data-hover="%3$s" href="%2$s" title="%3$s" class="title-animation-%4$s">%3$s</a></%1$s>',
1060 esc_attr(Utils::get_valid_html_tag($settings['title_tags'])),
1061 esc_url( get_permalink() ), esc_html( get_the_title() ),
1062 esc_attr($settings['title_style'])
1063 );
1064 }
1065
1066 public function render_date() {
1067 $settings = $this->get_settings_for_display();
1068
1069 if (!$this->get_settings('show_date')) {
1070 return;
1071 }
1072
1073 $date_for_hover = false;
1074 if ($settings['human_diff_time'] == 'yes') {
1075 $date_for_hover = ultimate_post_kit_post_time_diff(($settings['human_diff_time_short'] == 'yes') ? 'short' : '');
1076 } else {
1077 $date_for_hover = get_the_date();
1078 }
1079
1080 ?>
1081 <div class="upk-accordion-date">
1082 <i class="upk-icon-calendar" aria-hidden="true"></i>
1083 <span <?php
1084 if($date_for_hover){
1085 printf('data-hover="%s"', $date_for_hover);
1086 }
1087 ?>>
1088 <?php
1089 echo $date_for_hover;
1090 ?>
1091 </span>
1092 </div>
1093 <?php if ($settings['show_time']) : ?>
1094 <div class="upk-post-time">
1095 <i class="upk-icon-clock" aria-hidden="true"></i>
1096 <?php echo esc_html( get_the_time() ); ?>
1097 </div>
1098 <?php endif; ?>
1099
1100 <?php
1101 }
1102
1103 public function render_comments($id = 0) {
1104
1105 if (!$this->get_settings('show_comments')) {
1106 return;
1107 }
1108 ?>
1109
1110 <div class="upk-accordion-comments">
1111 <i class="upk-icon-bubbles" aria-hidden="true"></i>
1112 <span <?php printf('data-hover="%s"', get_comments_number($id) . ' ' . esc_html__('Comments', 'ultimate-post-kit')); ?>>
1113 <?php echo get_comments_number($id); ?>
1114 <?php echo esc_html__('Comments', 'ultimate-post-kit'); ?>
1115 </span>
1116 </div>
1117
1118 <?php
1119 }
1120
1121 public function render_author() {
1122
1123 if (!$this->get_settings('show_author')) {
1124 return;
1125 }
1126
1127 ?>
1128 <div class="upk-author-wrapper">
1129 <div class="upk-author-img">
1130 <?php echo get_avatar(get_the_author_meta('ID'), 48); ?>
1131 </div>
1132 <div class="upk-author-info-warp upk-flex">
1133 <div class="upk-author-name">
1134 <a href="<?php echo esc_url( get_author_posts_url(get_the_author_meta('ID')) ); ?>">
1135 <?php echo esc_html( get_the_author() ) ?>
1136 </a>
1137 </div>
1138 <div class="upk-author-role">
1139 <?php
1140 $aid = get_the_author_meta('ID');
1141 echo ucwords(get_user_role($aid));
1142 ?>
1143 </div>
1144 </div>
1145 </div>
1146 <?php
1147 }
1148
1149 public function render_post_accordion_item($post_id, $image_size, $excerpt_length) {
1150 $settings = $this->get_settings_for_display();
1151
1152 if ('yes' == $settings['global_link']) {
1153
1154 $this->add_render_attribute('accordion-item', 'onclick', "window.open('" . esc_url(get_permalink()) . "', '_self')", true);
1155 }
1156
1157 $this->add_render_attribute('accordion-item', 'class', 'upk-accordion-item', true);
1158
1159 ?>
1160
1161 <div <?php $this->print_render_attribute_string('accordion-item'); ?>>
1162 <div class="upk-accordion-item-box">
1163
1164 <div class="upk-accordion-image">
1165 <?php $this->render_image(get_post_thumbnail_id($post_id), $image_size); ?>
1166 </div>
1167 <?php $this->render_author(); ?>
1168
1169 <div class="upk-accordion-content">
1170 <?php $this->render_category(); ?>
1171 <?php $this->render_title(substr($this->get_name(), 4)); ?>
1172 <?php $this->render_excerpt($excerpt_length); ?>
1173
1174 <?php if ($settings['show_comments'] or $settings['show_date'] or $settings['show_reading_time']) : ?>
1175 <div class="upk-accordion-meta">
1176 <?php $this->render_date(); ?>
1177
1178 <?php if ($settings['show_comments'] == 'yes') : ?>
1179 <div data-separator="<?php echo esc_html($settings['meta_separator']); ?>">
1180 <?php $this->render_comments($post_id); ?>
1181 </div>
1182 <?php endif; ?>
1183
1184 <?php if (_is_upk_pro_activated()) :
1185 if ('yes' === $settings['show_reading_time']) : ?>
1186 <div class="upk-reading-time" data-separator="<?php echo esc_html($settings['meta_separator']); ?>">
1187 <?php echo esc_html( ultimate_post_kit_reading_time( get_the_content(), $settings['avg_reading_speed'], $settings['hide_seconds'] ?? 'no', $settings['hide_minutes'] ?? 'no' ) ); ?>
1188 </div>
1189 <?php endif; ?>
1190 <?php endif; ?>
1191 </div>
1192 <?php endif; ?>
1193
1194 </div>
1195
1196 </div>
1197 </div>
1198
1199 <?php
1200 }
1201
1202 protected function render() {
1203 $settings = $this->get_settings_for_display();
1204
1205 $this->query_posts($settings['item_limit']['size']);
1206 $wp_query = $this->get_query();
1207
1208 if (!$wp_query->found_posts) {
1209 return;
1210 }
1211
1212 ?>
1213 <div class="upk-accordion">
1214 <div class="upk-accordion-wrapper upk-accordion-content<?php echo esc_attr($settings['layout_content_style'])?> upk-accordion-<?php echo esc_attr($settings['layout_style'])?>">
1215
1216 <?php while ($wp_query->have_posts()) :
1217 $wp_query->the_post();
1218
1219 $thumbnail_size = $settings['primary_thumbnail_size'];
1220
1221 ?>
1222
1223 <?php $this->render_post_accordion_item(get_the_ID(), $thumbnail_size, $settings['excerpt_length']); ?>
1224
1225 <?php endwhile; ?>
1226
1227 </div>
1228 </div>
1229
1230 <?php
1231
1232 if ($settings['show_pagination']) { ?>
1233 <div class="ep-pagination">
1234 <?php ultimate_post_kit_post_pagination($wp_query, $this->get_id()); ?>
1235 </div>
1236 <?php
1237 }
1238 wp_reset_postdata();
1239 }
1240 }
1241