PluginProbe
Ultimate Post Kit – Elementor Post Grid, Post Carousel, Post Slider & Blog Layout Widgets / 4.2.1
Ultimate Post Kit – Elementor Post Grid, Post Carousel, Post Slider & Blog Layout Widgets v4.2.1
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-category / widgets / post-category.php

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

972 lines 26.0 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\PostCategory\Widgets;
4
5 use UltimatePostKit\Base\Module_Base;
6 use Elementor\Controls_Manager;
7 use Elementor\Group_Control_Border;
8 use Elementor\Group_Control_Box_Shadow;
9 use Elementor\Group_Control_Typography;
10 use Elementor\Group_Control_Background;
11 use Elementor\Group_Control_Image_Size;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 } // Exit if accessed directly
16
17 class Post_Category extends Module_Base {
18 private $_query = null;
19
20 public function get_name() {
21 return 'upk-post-category';
22 }
23
24 public function get_title() {
25 return BDTUPK . esc_html__( 'Category', 'ultimate-post-kit' );
26 }
27
28 public function get_icon() {
29 return 'upk-widget-icon upk-icon-post-category';
30 }
31
32 public function get_categories() {
33 return [ 'ultimate-post-kit' ];
34 }
35
36 public function get_keywords() {
37 return [ 'post', 'list', 'blog', 'recent', 'news', 'category' ];
38 }
39
40 public function get_style_depends() {
41 if ( $this->upk_is_edit_mode() ) {
42 return [ 'upk-all-styles' ];
43 } else {
44 return [ 'upk-post-category' ];
45 }
46 }
47
48 public function get_custom_help_url() {
49 return 'https://youtu.be/3S5hRqxTDTo';
50 }
51
52 public function get_query() {
53 return $this->_query;
54 }
55
56 public function has_widget_inner_wrapper(): bool {
57 return ! \Elementor\Plugin::$instance->experiments->is_feature_active( 'e_optimized_markup' );
58 }
59
60
61 protected function register_controls() {
62
63 $image_settings = ultimate_post_kit_option( 'category_image', 'ultimate_post_kit_other_settings', 'off' );
64
65 $this->start_controls_section(
66 'section_content_layout',
67 [
68 'label' => esc_html__( 'Layout', 'ultimate-post-kit' ),
69 ]
70 );
71
72 $this->add_control(
73 'style',
74 [
75 'label' => __( 'Style', 'ultimate-post-kit' ),
76 'type' => Controls_Manager::SELECT,
77 'default' => '1',
78 'options' => [
79 '1' => 'Style 1',
80 '2' => 'Style 2',
81 ],
82 ]
83 );
84
85 $this->add_responsive_control(
86 'columns',
87 [
88 'label' => __( 'Columns', 'ultimate-post-kit' ),
89 'type' => Controls_Manager::SELECT,
90 'default' => '3',
91 'tablet_default' => '2',
92 'mobile_default' => '1',
93 'options' => [
94 '1' => '1',
95 '2' => '2',
96 '3' => '3',
97 '4' => '4',
98 '5' => '5',
99 '6' => '6',
100 ],
101 'selectors' => [
102 '{{WRAPPER}} .upk-post-category' => 'grid-template-columns: repeat({{SIZE}}, 1fr);',
103 ],
104 ]
105 );
106
107 $this->add_responsive_control(
108 'column_gap',
109 [
110 'label' => esc_html__( 'Column Gap', 'ultimate-post-kit' ),
111 'type' => Controls_Manager::SLIDER,
112 'default' => [
113 'size' => 20,
114 ],
115 'selectors' => [
116 '{{WRAPPER}} .upk-post-category' => 'grid-gap: {{SIZE}}{{UNIT}};',
117 ],
118 ]
119 );
120
121 $this->add_responsive_control(
122 'item_height',
123 [
124 'label' => esc_html__( 'Item Height', 'ultimate-post-kit' ),
125 'type' => Controls_Manager::SLIDER,
126 'range' => [
127 'px' => [
128 'min' => 50,
129 'max' => 500,
130 ],
131 ],
132 'selectors' => [
133 '{{WRAPPER}} .upk-post-category .upk-category-item' => 'min-height: {{SIZE}}{{UNIT}};',
134 ],
135 ]
136 );
137
138 $this->add_responsive_control(
139 'alignment',
140 [
141 'label' => __( 'Alignment', 'ultimate-post-kit' ),
142 'type' => Controls_Manager::CHOOSE,
143 'options' => [
144 'left' => [
145 'title' => __( 'Left', 'ultimate-post-kit' ),
146 'icon' => 'eicon-text-align-left',
147 ],
148 'center' => [
149 'title' => __( 'Center', 'ultimate-post-kit' ),
150 'icon' => 'eicon-text-align-center',
151 ],
152 'right' => [
153 'title' => __( 'Right', 'ultimate-post-kit' ),
154 'icon' => 'eicon-text-align-right',
155 ]
156 ],
157 'selectors' => [
158 '{{WRAPPER}} .upk-post-category .upk-category-item' => 'text-align: {{VALUE}};',
159 ],
160 ]
161 );
162 if ( $image_settings == 'on' ) :
163 $this->add_control(
164 'show_image',
165 [
166 'label' => esc_html__( 'Show Image', 'ultimate-post-kit' ),
167 'type' => Controls_Manager::SWITCHER,
168 'default' => 'no',
169 'separator' => 'before'
170 ]
171 );
172 endif;
173 $this->add_group_control(
174 Group_Control_Image_Size::get_type(),
175 [
176 'name' => 'cat_image_size',
177 'exclude' => [ 'custom' ],
178 'include' => [],
179 'default' => 'thumbnail',
180 'condition' => [
181 'show_image' => 'yes'
182 ]
183 ]
184 );
185 $this->add_control(
186 'show_count',
187 [
188 'label' => esc_html__( 'Show Count', 'ultimate-post-kit' ),
189 'type' => Controls_Manager::SWITCHER,
190 'default' => 'yes',
191 ]
192 );
193
194 $this->add_control(
195 'show_text',
196 [
197 'label' => esc_html__( 'Show Text', 'ultimate-post-kit' ),
198 'type' => Controls_Manager::SWITCHER,
199 ]
200 );
201
202 $this->add_control(
203 'text_length',
204 [
205 'label' => esc_html__( 'Text Limit', 'ultimate-post-kit' ),
206 'description' => esc_html__( 'If you set 0 so you will get full main content.', 'ultimate-post-kit' ),
207 'type' => Controls_Manager::NUMBER,
208 'default' => 30,
209 'condition' => [
210 'show_text' => 'yes'
211 ],
212 ]
213 );
214
215 $this->add_control(
216 'view_all_button',
217 [
218 'label' => esc_html__( 'View All Button', 'ultimate-post-kit' ),
219 'type' => Controls_Manager::SWITCHER,
220 ]
221 );
222
223 $this->end_controls_section();
224
225 $this->start_controls_section(
226 'section_post_grid_query',
227 [
228 'label' => esc_html__( 'Query', 'ultimate-post-kit' ),
229 ]
230 );
231
232 $this->add_control(
233 'item_limit',
234 [
235 'label' => esc_html__( 'Item Limit', 'ultimate-post-kit' ),
236 'type' => Controls_Manager::SLIDER,
237 'range' => [
238 'px' => [
239 'min' => 1,
240 'max' => 50,
241 ],
242 ],
243 'default' => [
244 'size' => 6,
245 ],
246 'condition' => [
247 'posts_source!' => 'current_query',
248 ]
249 ]
250 );
251
252 $this->add_control(
253 'taxonomy',
254 [
255 'label' => esc_html__( 'Taxonomy', 'ultimate-post-kit' ),
256 'type' => Controls_Manager::SELECT,
257 'default' => 'category',
258 'options' => ultimate_post_kit_get_taxonomies(),
259 ]
260 );
261
262 $this->add_control(
263 'orderby',
264 [
265 'label' => esc_html__( 'Order By', 'ultimate-post-kit' ),
266 'type' => Controls_Manager::SELECT,
267 'default' => 'name',
268 'options' => [
269 'name' => esc_html__( 'Name', 'ultimate-post-kit' ),
270 'term_id' => esc_html__( 'ID', 'ultimate-post-kit' ),
271 'slug' => esc_html__( 'Slug', 'ultimate-post-kit' ),
272 'count' => esc_html__( 'Post Count', 'ultimate-post-kit' ),
273 'description' => esc_html__( 'Description', 'ultimate-post-kit' ),
274 'parent' => esc_html__( 'Parent', 'ultimate-post-kit' ),
275 'term_order' => esc_html__( 'Menu Order', 'ultimate-post-kit' ),
276 'rand' => esc_html__( 'Random', 'ultimate-post-kit' ),
277 ],
278 ]
279 );
280
281 $this->add_control(
282 'minimum_post_count',
283 [
284 'label' => esc_html__( 'Minimum Post Count', 'ultimate-post-kit' ) .BDTUPK_NC,
285 'type' => Controls_Manager::NUMBER,
286 'default' => 0,
287 'min' => 0,
288 'placeholder' => '0',
289 'condition' => [
290 'orderby' => 'count',
291 ],
292 'description' => esc_html__( 'Hide categories that have fewer than this many posts. 0 = show all.', 'ultimate-post-kit' ),
293 ]
294 );
295
296 $this->add_control(
297 'order',
298 [
299 'label' => esc_html__( 'Order', 'ultimate-post-kit' ),
300 'type' => Controls_Manager::SELECT,
301 'default' => 'asc',
302 'options' => [
303 'asc' => esc_html__( 'ASC', 'ultimate-post-kit' ),
304 'desc' => esc_html__( 'DESC', 'ultimate-post-kit' ),
305 ],
306 ]
307 );
308
309 $this->add_control(
310 'exclude',
311 [
312 'label' => esc_html__( 'Exclude', 'ultimate-post-kit' ),
313 'type' => Controls_Manager::TEXT,
314 'placeholder' => __( 'Category ID: 12,3,1', 'ultimate-post-kit' ),
315 ]
316 );
317
318 $this->add_control(
319 'parent',
320 [
321 'label' => esc_html__( 'Parent', 'ultimate-post-kit' ),
322 'type' => Controls_Manager::TEXT,
323 'placeholder' => __( 'Category ID: 12', 'ultimate-post-kit' ),
324 ]
325 );
326
327 $this->end_controls_section();
328
329 //Style
330 $this->start_controls_section(
331 'upk_section_style',
332 [
333 'label' => esc_html__( 'Items', 'ultimate-post-kit' ),
334 'tab' => Controls_Manager::TAB_STYLE,
335 ]
336 );
337
338 $this->start_controls_tabs( 'tabs_item_style' );
339
340 $this->start_controls_tab(
341 'tab_item_normal',
342 [
343 'label' => esc_html__( 'Normal', 'ultimate-post-kit' ),
344 ]
345 );
346
347 $this->add_control(
348 'single_background',
349 [
350 'label' => esc_html__( 'Single Background', 'ultimate-post-kit' ),
351 'type' => Controls_Manager::SWITCHER,
352 ]
353 );
354
355 $this->add_group_control(
356 Group_Control_Background::get_type(),
357 [
358 'name' => 'item_background',
359 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item',
360 'condition' => [
361 'single_background' => 'yes'
362 ]
363 ]
364 );
365
366 $this->add_control(
367 'multiple_background',
368 [
369 'label' => esc_html__( 'Multiple Background', 'ultimate-post-kit' ),
370 'type' => Controls_Manager::TEXTAREA,
371 'placeholder' => '#000000, #f5f5f5, #999999',
372 'condition' => [
373 'single_background' => ''
374 ]
375 ]
376 );
377
378 $this->add_group_control(
379 Group_Control_Border::get_type(),
380 [
381 'name' => 'item_border',
382 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item',
383 ]
384 );
385
386 $this->add_responsive_control(
387 'item_border_radius',
388 [
389 'label' => esc_html__( 'Border Radius', 'ultimate-post-kit' ),
390 'type' => Controls_Manager::DIMENSIONS,
391 'size_units' => [ 'px', '%' ],
392 'selectors' => [
393 '{{WRAPPER}} .upk-post-category .upk-category-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
394 ],
395 ]
396 );
397
398 $this->add_responsive_control(
399 'item_padding',
400 [
401 'label' => __( 'Padding', 'ultimate-post-kit' ),
402 'type' => Controls_Manager::DIMENSIONS,
403 'size_units' => [ 'px', 'em', '%' ],
404 'selectors' => [
405 '{{WRAPPER}} .upk-post-category .upk-category-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
406 ],
407 ]
408 );
409
410 $this->add_group_control(
411 Group_Control_Box_Shadow::get_type(),
412 [
413 'name' => 'item_box_shadow',
414 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item',
415 ]
416 );
417
418 $this->end_controls_tab();
419
420 $this->start_controls_tab(
421 'tab_item_hover',
422 [
423 'label' => esc_html__( 'Hover', 'ultimate-post-kit' ),
424 ]
425 );
426
427 $this->add_group_control(
428 Group_Control_Background::get_type(),
429 [
430 'name' => 'itam_background_hover',
431 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item:hover',
432 ]
433 );
434
435 $this->add_control(
436 'item_border_color_hover',
437 [
438 'label' => esc_html__( 'Border Color', 'ultimate-post-kit' ),
439 'type' => Controls_Manager::COLOR,
440 'selectors' => [
441 '{{WRAPPER}} .upk-post-category .upk-category-item:hover' => 'border-color: {{VALUE}};'
442 ],
443 'condition' => [
444 'item_border_border!' => ''
445 ]
446 ]
447 );
448
449 $this->add_group_control(
450 Group_Control_Box_Shadow::get_type(),
451 [
452 'name' => 'item_box_shadow_hover',
453 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item:hover',
454 ]
455 );
456
457 $this->add_control(
458 'item_hover_opacity',
459 [
460 'label' => esc_html__( 'Opacity', 'ultimate-post-kit' ),
461 'type' => Controls_Manager::SLIDER,
462 'range' => [
463 'px' => [
464 'min' => 0,
465 'max' => 1,
466 'step' => 0.1
467 ],
468 ],
469 'selectors' => [
470 '{{WRAPPER}} .upk-post-category .upk-category-item:hover' => 'opacity: {{SIZE}};',
471 ],
472 ]
473 );
474
475 $this->end_controls_tab();
476
477 $this->end_controls_tabs();
478
479 $this->end_controls_section();
480
481 $this->start_controls_section(
482 'section_style_category_image',
483 [
484 'label' => esc_html__( 'Image', 'ultimate-post-kit' ),
485 'tab' => Controls_Manager::TAB_STYLE,
486 'condition' => [
487 'show_image' => 'yes',
488 ]
489 ]
490 );
491
492 $this->add_group_control(
493 Group_Control_Background::get_type(),
494 [
495 'name' => 'cat_image_background',
496 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-image img',
497 ]
498 );
499 $this->add_responsive_control(
500 'cat_image_width',
501 [
502 'label' => esc_html__( 'Image Size', 'ultimate-post-kit' ),
503 'type' => Controls_Manager::SLIDER,
504 'size_units' => [ '%' ],
505 'default' => [
506 'unit' => '%',
507 'size' => 100,
508 ],
509 'selectors' => [
510 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-image img' => 'width: {{SIZE}}{{UNIT}};',
511 ],
512 'condition' => [
513 'style' => '1'
514 ]
515 ]
516 );
517 $this->add_group_control(
518 Group_Control_Border::get_type(),
519 [
520 'name' => 'cat_image_border',
521 'label' => esc_html__( 'Border', 'ultimate-post-kit' ),
522 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-image img',
523 ]
524 );
525
526 $this->add_responsive_control(
527 'cat_image_radius',
528 [
529 'label' => esc_html__( 'Border Radius', 'ultimate-post-kit' ),
530 'type' => Controls_Manager::DIMENSIONS,
531 'size_units' => [ 'px', '%', 'em' ],
532 'selectors' => [
533 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-image img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
534 ],
535 ]
536 );
537
538 $this->add_responsive_control(
539 'cat_image_padding',
540 [
541 'label' => esc_html__( 'Padding', 'ultimate-post-kit' ),
542 'type' => Controls_Manager::DIMENSIONS,
543 'size_units' => [ 'px', '%', 'em' ],
544 'selectors' => [
545 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-image img' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
546 ],
547 ]
548 );
549 $this->add_responsive_control(
550 'cat_image_bottom_spacing',
551 [
552 'label' => esc_html__( 'Spacing', 'ultimate-post-kit' ),
553 'type' => Controls_Manager::SLIDER,
554 'default' => [
555 'unit' => 'px',
556 'size' => 10,
557 ],
558 'selectors' => [
559 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-image' => 'margin-bottom: {{SIZE}}{{UNIT}};',
560 ],
561 'condition' => [
562 'style' => '1'
563 ],
564 ]
565 );
566
567
568 $this->add_group_control(
569 Group_Control_Box_Shadow::get_type(),
570 [
571 'name' => 'cat_image_box_shadow',
572 'label' => esc_html__( 'Shadow', 'ultimate-post-kit' ),
573 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-image img',
574 ]
575 );
576
577 $this->end_controls_section();
578
579 $this->start_controls_section(
580 'section_style_category_name',
581 [
582 'label' => esc_html__( 'Name', 'ultimate-post-kit' ),
583 'tab' => Controls_Manager::TAB_STYLE,
584 ]
585 );
586
587 $this->add_control(
588 'category_name_color',
589 [
590 'label' => esc_html__( 'Color', 'ultimate-post-kit' ),
591 'type' => Controls_Manager::COLOR,
592 'selectors' => [
593 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-name' => 'color: {{VALUE}};',
594 ],
595 ]
596 );
597
598 $this->add_control(
599 'category_name_color_hover',
600 [
601 'label' => esc_html__( 'Hover Color', 'ultimate-post-kit' ),
602 'type' => Controls_Manager::COLOR,
603 'selectors' => [
604 '{{WRAPPER}} .upk-post-category .upk-category-item:hover .upk-category-name' => 'color: {{VALUE}};',
605 ],
606 ]
607 );
608
609 $this->add_group_control(
610 Group_Control_Typography::get_type(),
611 [
612 'name' => 'category_name_typography',
613 'label' => esc_html__( 'Typography', 'ultimate-post-kit' ),
614 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-name',
615 ]
616 );
617
618 $this->end_controls_section();
619
620 $this->start_controls_section(
621 'section_style_category_text',
622 [
623 'label' => esc_html__( 'Description', 'ultimate-post-kit' ),
624 'tab' => Controls_Manager::TAB_STYLE,
625 ]
626 );
627
628 $this->add_control(
629 'category_text_color',
630 [
631 'label' => esc_html__( 'Color', 'ultimate-post-kit' ),
632 'type' => Controls_Manager::COLOR,
633 'selectors' => [
634 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-text' => 'color: {{VALUE}};',
635 ],
636 ]
637 );
638
639 $this->add_control(
640 'category_text_color_hover',
641 [
642 'label' => esc_html__( 'Hover Color', 'ultimate-post-kit' ),
643 'type' => Controls_Manager::COLOR,
644 'selectors' => [
645 '{{WRAPPER}} .upk-post-category .upk-category-item:hover .upk-category-text' => 'color: {{VALUE}};',
646 ],
647 ]
648 );
649
650 $this->add_responsive_control(
651 'category_text_spacing',
652 [
653 'label' => __( 'Spacing', 'ultimate-post-kit' ),
654 'type' => Controls_Manager::SLIDER,
655 'range' => [
656 'px' => [
657 'min' => 0,
658 'max' => 50,
659 ],
660 ],
661 'selectors' => [
662 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-text' => 'padding-top: {{SIZE}}px;'
663 ],
664 ]
665 );
666
667 $this->add_group_control(
668 Group_Control_Typography::get_type(),
669 [
670 'name' => 'category_text_typography',
671 'label' => esc_html__( 'Typography', 'ultimate-post-kit' ),
672 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-text',
673 ]
674 );
675
676 $this->end_controls_section();
677
678 $this->start_controls_section(
679 'section_style_count',
680 [
681 'label' => esc_html__( 'Count', 'ultimate-post-kit' ),
682 'tab' => Controls_Manager::TAB_STYLE,
683 ]
684 );
685
686 $this->add_control(
687 'count_color',
688 [
689 'label' => esc_html__( 'Color', 'ultimate-post-kit' ),
690 'type' => Controls_Manager::COLOR,
691 'selectors' => [
692 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count' => 'color: {{VALUE}};',
693 ],
694 ]
695 );
696
697 $this->add_control(
698 'count_color_hover',
699 [
700 'label' => esc_html__( 'Hover Color', 'ultimate-post-kit' ),
701 'type' => Controls_Manager::COLOR,
702 'selectors' => [
703 '{{WRAPPER}} .upk-post-category .upk-category-item:hover .upk-category-count' => 'color: {{VALUE}};',
704 ],
705 ]
706 );
707
708 $this->add_group_control(
709 Group_Control_Background::get_type(),
710 [
711 'name' => 'count_background',
712 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count',
713 ]
714 );
715
716 $this->add_group_control(
717 Group_Control_Border::get_type(),
718 [
719 'name' => 'count_border',
720 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count',
721 ]
722 );
723
724 $this->add_responsive_control(
725 'count_border_radius',
726 [
727 'label' => esc_html__( 'Border Radius', 'ultimate-post-kit' ),
728 'type' => Controls_Manager::DIMENSIONS,
729 'size_units' => [ 'px', '%' ],
730 'selectors' => [
731 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
732 ],
733 ]
734 );
735
736 $this->add_responsive_control(
737 'count_padding',
738 [
739 'label' => __( 'Padding', 'ultimate-post-kit' ),
740 'type' => Controls_Manager::DIMENSIONS,
741 'size_units' => [ 'px', 'em', '%' ],
742 'selectors' => [
743 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
744 ],
745 ]
746 );
747
748 $this->add_group_control(
749 Group_Control_Box_Shadow::get_type(),
750 [
751 'name' => 'count_box_shadow',
752 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count',
753 ]
754 );
755
756 $this->add_group_control(
757 Group_Control_Typography::get_type(),
758 [
759 'name' => 'count_typography',
760 'label' => esc_html__( 'Typography', 'ultimate-post-kit' ),
761 'selector' => '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count',
762 ]
763 );
764
765 $this->add_control(
766 'count_offset_toggle',
767 [
768 'label' => __( 'Offset', 'ultimate-post-kit' ),
769 'type' => Controls_Manager::POPOVER_TOGGLE,
770 'label_off' => __( 'None', 'ultimate-post-kit' ),
771 'label_on' => __( 'Custom', 'ultimate-post-kit' ),
772 'return_value' => 'yes',
773 ]
774 );
775
776 $this->start_popover();
777
778 $this->add_responsive_control(
779 'count_horizontal_offset',
780 [
781 'label' => __( 'Horizontal Offset', 'ultimate-post-kit' ),
782 'type' => Controls_Manager::SLIDER,
783 'range' => [
784 'px' => [
785 'min' => -300,
786 'step' => 2,
787 'max' => 300,
788 ],
789 ],
790 'condition' => [
791 'count_offset_toggle' => 'yes'
792 ],
793 'render_type' => 'ui',
794 'selectors' => [
795 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count' => 'right: {{SIZE}}px;',
796 ],
797 ]
798 );
799
800 $this->add_responsive_control(
801 'count_vertical_offset',
802 [
803 'label' => __( 'Vertical Offset', 'ultimate-post-kit' ),
804 'type' => Controls_Manager::SLIDER,
805 'range' => [
806 'px' => [
807 'min' => -300,
808 'step' => 2,
809 'max' => 300,
810 ],
811 ],
812 'condition' => [
813 'count_offset_toggle' => 'yes'
814 ],
815 'render_type' => 'ui',
816 'selectors' => [
817 '{{WRAPPER}} .upk-post-category .upk-category-item .upk-category-count' => 'top: {{SIZE}}px;',
818 ],
819 ]
820 );
821
822 $this->end_popover();
823
824 $this->end_controls_section();
825 }
826
827 public function render() {
828 $settings = $this->get_settings_for_display();
829 $image_settings = ultimate_post_kit_option( 'category_image', 'ultimate_post_kit_other_settings', 'off' );
830 $taxonomy = ! empty( $settings['taxonomy'] ) ? $settings['taxonomy'] : 'category';
831 $taxonomy_object = get_taxonomy( $taxonomy );
832 $taxonomy_label = $taxonomy_object ? $taxonomy_object->labels->name : ucwords( str_replace( [ '-', '_' ], ' ', $taxonomy ) );
833 $orderby = $settings['orderby'];
834 $categories = get_categories(
835 [
836 'taxonomy' => $taxonomy,
837 'orderby' => $orderby === 'rand' ? 'name' : $orderby,
838 'order' => $settings["order"],
839 'hide_empty' => 0,
840 'exclude' => explode( ',', esc_attr( $settings["exclude"] ) ),
841 'parent' => $settings["parent"],
842 ]
843 );
844 if ( $orderby === 'rand' && ! empty( $categories ) ) {
845 shuffle( $categories );
846 }
847
848 $min_post_count = isset( $settings['minimum_post_count'] ) ? (int) $settings['minimum_post_count'] : 0;
849 if ( $min_post_count > 0 ) {
850 $categories = array_values( array_filter( $categories, function ( $cat ) use ( $min_post_count ) {
851 $count = isset( $cat->count ) ? (int) $cat->count : ( isset( $cat->category_count ) ? (int) $cat->category_count : 0 );
852 return $count >= $min_post_count;
853 } ) );
854 }
855
856 $this->add_render_attribute( 'category-container', 'class', 'upk-post-category' );
857 $this->add_render_attribute( 'category-container', 'class', 'upk-category-style-' . $settings['style'] );
858
859 if ( $settings['view_all_button'] == 'yes' ) {
860 $this->add_render_attribute( 'category-container', 'class', 'upk-category-view-all' );
861 }
862
863
864 if ( ! empty( $categories ) ) :
865
866 ?>
867 <div <?php $this->print_render_attribute_string( 'category-container' ); ?>>
868 <?php
869 $multi_bg = isset( $settings['multiple_background'] ) && ! empty( $settings['multiple_background'] ) ? $settings['multiple_background'] : '';
870 $multiple_bg = explode( ',', rtrim( $multi_bg, ',' ) );
871 $total_category = count( $categories );
872
873 // re-creating array for the multiple colors
874 $multiple_bg_create = [];
875 $jCount = count( $multiple_bg );
876 $j = 0;
877 for ( $i = 0; $i < $total_category; $i++ ) {
878 if ( $j == $jCount ) {
879 $j = 0;
880 }
881 $multiple_bg_create[ $i ] = $multiple_bg[ $j ];
882 $j++;
883 }
884
885 foreach ( $categories as $index => $cat ) :
886
887 $this->add_render_attribute( 'category-item', 'class', 'upk-category-item', true );
888
889 $this->add_render_attribute( 'category-item', 'href', get_category_link( $cat->cat_ID ), true );
890
891 $bg_color = strToHex( $cat->cat_name );
892 //===============================
893 // CATEGORY IMAGE
894 $category_image_id = get_term_meta( $cat->cat_ID, 'upk-category-image-id', true );
895
896 if ( ! empty( $category_image_id ) ) {
897 $category_url = wp_get_attachment_image_url( $category_image_id, $settings['cat_image_size_size'] );
898 $category_image = '<div class="upk-category-image"><img src="' . esc_url( $category_url ) . '" alt="' . esc_attr( $cat->cat_name ) . '"></div>';
899 } else {
900 $category_image = '';
901 }
902 //===============================
903
904 if ( ! empty( $settings['multiple_background'] ) ) {
905 $bg_color = $multiple_bg_create[ $index ];
906 if ( ! preg_match( '/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/', $multiple_bg_create[ $index ] ) ) {
907 $bg_color = strToHex( $cat->cat_name );
908 }
909 }
910
911 if ( $settings['single_background'] == '' ) {
912 $this->add_render_attribute( 'category-item', 'style', "background-color: $bg_color", true );
913 }
914
915 ?>
916
917 <a <?php $this->print_render_attribute_string( 'category-item' ); ?>>
918 <!-- display image -->
919 <?php if ( $image_settings == 'on' && $settings['show_image'] == 'yes' ) :
920 echo wp_kses_post($category_image);
921 endif; ?>
922 <div class="upk-content">
923 <span class="upk-category-name">
924 <?php echo esc_html( $cat->cat_name ); ?>
925 </span>
926
927 <?php if ( ! empty( $cat->category_description ) and $settings['show_text'] == 'yes' ) : ?>
928 <span class="upk-category-text">
929 <?php echo esc_html( wp_trim_words( $cat->category_description, $settings['text_length'] ) ); ?>
930 </span>
931 <?php endif; ?>
932
933 <?php if ( $settings['show_count'] == 'yes' ) : ?>
934
935 <span class="upk-category-count">
936 <?php echo esc_html( $cat->category_count ); ?>
937 </span>
938 <?php endif; ?>
939 </div>
940
941 <?php if ( $settings['view_all_button'] == 'yes' ) : ?>
942 <div class="upk-category-btn">
943 <span>
944 <?php esc_html_e( 'view all', 'ultimate-post-kit' ); ?>
945 </span>
946 </div>
947 <?php endif; ?>
948
949 </a>
950 <?php
951
952 if ( ! empty( $settings['item_limit']['size'] ) ) {
953 if ( $index == ( $settings['item_limit']['size'] - 1 ) ) {
954 break;
955 }
956 }
957 endforeach;
958 ?>
959 </div>
960 <?php
961 else :
962
963 echo '<div class="upk-alert">' . esc_html( sprintf(
964 /* translators: %s: taxonomy label */
965 __( '%s Categories Not Found!', 'ultimate-post-kit' ),
966 $taxonomy_label
967 ) ) . '</div>';
968
969 endif;
970 }
971 }
972