PluginProbe
Ultimate Post Kit – Elementor Post Grid, Post Carousel, Post Slider & Blog Layout Widgets / 4.0.9
Ultimate Post Kit – Elementor Post Grid, Post Carousel, Post Slider & Blog Layout Widgets v4.0.9
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.0.9, at modules/post-accordion/widgets/post-accordion.php

1,240 lines 32.8 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 if ($posts_per_page) {
1010 $args['posts_per_page'] = $posts_per_page;
1011 $args['paged'] = max(1, get_query_var('paged'), get_query_var('page'));
1012 }
1013 $args = array_merge($default, $args);
1014 $this->_query = new WP_Query($args);
1015 }
1016
1017 protected function _upk_get_category($post_type) {
1018 switch ($post_type) {
1019 case 'campaign':
1020 $taxonomy = 'campaign_category';
1021 break;
1022 case 'lightbox_library':
1023 $taxonomy = 'ngg_tag';
1024 break;
1025 case 'give_forms':
1026 $taxonomy = 'give_forms_category';
1027 break;
1028 case 'tribe_events':
1029 $taxonomy = 'tribe_events_cat';
1030 break;
1031 case 'product':
1032 $taxonomy = 'product_cat';
1033 break;
1034 default:
1035 $taxonomy = 'category';
1036 break;
1037 }
1038
1039 $categories = get_the_terms(get_the_ID(), $taxonomy);
1040 $_categories = [];
1041 if ($categories) {
1042 foreach ($categories as $category) {
1043 $link = '<a data-hover="' . $category->name . '" href="' . esc_url(get_category_link($category->term_id)) . '">' . $category->name . '</a>';
1044 $_categories[$category->slug] = $link;
1045 }
1046 }
1047 return implode(' ', $_categories);
1048 }
1049
1050 public function render_title() {
1051 $settings = $this->get_settings_for_display();
1052
1053 if (!$this->get_settings('show_title')) {
1054 return;
1055 }
1056
1057 printf(
1058 '<%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>',
1059 esc_attr(Utils::get_valid_html_tag($settings['title_tags'])),
1060 esc_url( get_permalink() ), esc_html( get_the_title() ),
1061 esc_attr($settings['title_style'])
1062 );
1063 }
1064
1065 public function render_date() {
1066 $settings = $this->get_settings_for_display();
1067
1068 if (!$this->get_settings('show_date')) {
1069 return;
1070 }
1071
1072 $date_for_hover = false;
1073 if ($settings['human_diff_time'] == 'yes') {
1074 $date_for_hover = ultimate_post_kit_post_time_diff(($settings['human_diff_time_short'] == 'yes') ? 'short' : '');
1075 } else {
1076 $date_for_hover = get_the_date();
1077 }
1078
1079 ?>
1080 <div class="upk-accordion-date">
1081 <i class="upk-icon-calendar" aria-hidden="true"></i>
1082 <span <?php
1083 if($date_for_hover){
1084 printf('data-hover="%s"', $date_for_hover);
1085 }
1086 ?>>
1087 <?php
1088 echo $date_for_hover;
1089 ?>
1090 </span>
1091 </div>
1092 <?php if ($settings['show_time']) : ?>
1093 <div class="upk-post-time">
1094 <i class="upk-icon-clock" aria-hidden="true"></i>
1095 <?php echo esc_html( get_the_time() ); ?>
1096 </div>
1097 <?php endif; ?>
1098
1099 <?php
1100 }
1101
1102 public function render_comments($id = 0) {
1103
1104 if (!$this->get_settings('show_comments')) {
1105 return;
1106 }
1107 ?>
1108
1109 <div class="upk-accordion-comments">
1110 <i class="upk-icon-bubbles" aria-hidden="true"></i>
1111 <span <?php printf('data-hover="%s"', get_comments_number($id) . ' ' . esc_html__('Comments', 'ultimate-post-kit')); ?>>
1112 <?php echo get_comments_number($id); ?>
1113 <?php echo esc_html__('Comments', 'ultimate-post-kit'); ?>
1114 </span>
1115 </div>
1116
1117 <?php
1118 }
1119
1120 public function render_author() {
1121
1122 if (!$this->get_settings('show_author')) {
1123 return;
1124 }
1125
1126 ?>
1127 <div class="upk-author-wrapper">
1128 <div class="upk-author-img">
1129 <?php echo get_avatar(get_the_author_meta('ID'), 48); ?>
1130 </div>
1131 <div class="upk-author-info-warp upk-flex">
1132 <div class="upk-author-name">
1133 <a href="<?php echo esc_url( get_author_posts_url(get_the_author_meta('ID')) ); ?>">
1134 <?php echo esc_html( get_the_author() ) ?>
1135 </a>
1136 </div>
1137 <div class="upk-author-role">
1138 <?php
1139 $aid = get_the_author_meta('ID');
1140 echo ucwords(get_user_role($aid));
1141 ?>
1142 </div>
1143 </div>
1144 </div>
1145 <?php
1146 }
1147
1148 public function render_post_accordion_item($post_id, $image_size, $excerpt_length) {
1149 $settings = $this->get_settings_for_display();
1150
1151 if ('yes' == $settings['global_link']) {
1152
1153 $this->add_render_attribute('accordion-item', 'onclick', "window.open('" . esc_url(get_permalink()) . "', '_self')", true);
1154 }
1155
1156 $this->add_render_attribute('accordion-item', 'class', 'upk-accordion-item', true);
1157
1158 ?>
1159
1160 <div <?php $this->print_render_attribute_string('accordion-item'); ?>>
1161 <div class="upk-accordion-item-box">
1162
1163 <div class="upk-accordion-image">
1164 <?php $this->render_image(get_post_thumbnail_id($post_id), $image_size); ?>
1165 </div>
1166 <?php $this->render_author(); ?>
1167
1168 <div class="upk-accordion-content">
1169 <?php $this->render_category(); ?>
1170 <?php $this->render_title(substr($this->get_name(), 4)); ?>
1171 <?php $this->render_excerpt($excerpt_length); ?>
1172
1173 <?php if ($settings['show_comments'] or $settings['show_date'] or $settings['show_reading_time']) : ?>
1174 <div class="upk-accordion-meta">
1175 <?php $this->render_date(); ?>
1176
1177 <?php if ($settings['show_comments'] == 'yes') : ?>
1178 <div data-separator="<?php echo esc_html($settings['meta_separator']); ?>">
1179 <?php $this->render_comments($post_id); ?>
1180 </div>
1181 <?php endif; ?>
1182
1183 <?php if (_is_upk_pro_activated()) :
1184 if ('yes' === $settings['show_reading_time']) : ?>
1185 <div class="upk-reading-time" data-separator="<?php echo esc_html($settings['meta_separator']); ?>">
1186 <?php echo esc_html( ultimate_post_kit_reading_time( get_the_content(), $settings['avg_reading_speed'] ) ); ?>
1187 </div>
1188 <?php endif; ?>
1189 <?php endif; ?>
1190 </div>
1191 <?php endif; ?>
1192
1193 </div>
1194
1195 </div>
1196 </div>
1197
1198 <?php
1199 }
1200
1201 protected function render() {
1202 $settings = $this->get_settings_for_display();
1203
1204 $this->query_posts($settings['item_limit']['size']);
1205 $wp_query = $this->get_query();
1206
1207 if (!$wp_query->found_posts) {
1208 return;
1209 }
1210
1211 ?>
1212 <div class="upk-accordion">
1213 <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'])?>">
1214
1215 <?php while ($wp_query->have_posts()) :
1216 $wp_query->the_post();
1217
1218 $thumbnail_size = $settings['primary_thumbnail_size'];
1219
1220 ?>
1221
1222 <?php $this->render_post_accordion_item(get_the_ID(), $thumbnail_size, $settings['excerpt_length']); ?>
1223
1224 <?php endwhile; ?>
1225
1226 </div>
1227 </div>
1228
1229 <?php
1230
1231 if ($settings['show_pagination']) { ?>
1232 <div class="ep-pagination">
1233 <?php ultimate_post_kit_post_pagination($wp_query, $this->get_id()); ?>
1234 </div>
1235 <?php
1236 }
1237 wp_reset_postdata();
1238 }
1239 }
1240