PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.3.18
UiCore Elements – Free widgets and templates for Elementor v1.3.18
1.3.18 1.3.17 1.3.16 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.2.0 1.2.1 1.2.2 1.2.3 All 42 releases
← All changes | includes/widgets/theme-builder/post-meta.php +141 -122 1.2.3 → 1.3.18 View file →
@@ -1,10 +1,12 @@
1 1 <?php
2 +
2 3 namespace UiCoreElements\Widgets\ThemeBuilder;
3 4
4 5 use UiCoreElements\UiCoreWidget;
5 6 use Elementor\Controls_Manager;
6 7 use UiCoreElements\Utils\Meta_Trait;
8 +use UiCoreElements\Helper;
7 9
8 10 defined('ABSPATH') || exit();
9 11
10 12 /**
@@ -11,153 +13,170 @@
11 13 * The Title widget.
12 14 *
13 15 * @since 1.0.0
14 16 */
15 -class PostMeta extends UiCoreWidget {
17 +class PostMeta extends UiCoreWidget
18 +{
16 19
17 - use Meta_Trait;
20 + use Meta_Trait;
18 21
19 - public function get_name() {
20 - return 'uicore-post-meta';
21 - }
22 - public function get_title() {
23 - return esc_html__( 'Post Meta', 'uicore-elements' );
24 - }
25 - public function get_icon() {
26 - return 'eicon-post-info ui-e-widget';
27 - }
28 - public function get_categories() {
29 - return ['uicore', 'uicore-theme-builder' ];
30 - }
31 -
32 - public function get_styles() {
33 - return [ 'post-meta' ];
34 - }
35 - public function get_scripts() {
22 + public function get_name()
23 + {
24 + return 'uicore-post-meta';
25 + }
26 + public function get_title()
27 + {
28 + return esc_html__('Post Meta', 'uicore-elements');
29 + }
30 + public function get_icon()
31 + {
32 + return 'eicon-post-info ui-e-widget';
33 + }
34 + public function get_categories()
35 + {
36 + return ['uicore', 'uicore-theme-builder'];
37 + }
38 + public function get_styles()
39 + {
40 + return ['post-meta'];
41 + }
42 + public function get_scripts()
43 + {
36 44 return [];
37 45 }
38 - public function get_keywords() {
39 - return [ 'post', 'meta', 'info' ];
40 - }
41 - public function has_widget_inner_wrapper(): bool {
42 - // TODO: remove after 3.30, when the full deprecation of widget innet wrapper is ready
43 - return ! \Elementor\Plugin::$instance->experiments->is_feature_active( 'e_optimized_markup' );
46 + public function get_keywords()
47 + {
48 + return ['post', 'meta', 'info'];
44 49 }
50 + public function has_widget_inner_wrapper(): bool
51 + {
52 + // TODO: remove after Optmized Markup experiment is merged to the core
53 + return ! \Elementor\Plugin::$instance->experiments->is_feature_active('e_optimized_markup');
54 + }
45 55
46 - protected function register_controls() {
47 - $this->start_controls_section(
48 - 'section_content',
49 - [
50 - 'label' => esc_html__( 'Content', 'uicore-elements' ),
51 - ]
52 - );
56 + protected function register_controls()
57 + {
58 + $this->start_controls_section(
59 + 'section_content',
60 + [
61 + 'label' => esc_html__('Content', 'uicore-elements'),
62 + ]
63 + );
53 64
54 - $this->add_control('meta_list',[
55 - 'label' => esc_html__( 'Meta Data', 'uicore-elements' ),
56 - 'type' => \Elementor\Controls_Manager::REPEATER,
57 - 'fields' => $this->get_meta_content_controls(),
58 - 'default' => [
59 - [
60 - 'type' => 'author'
61 - ],
62 - ],
63 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
64 - 'prevent_empty' => false,
65 - 'separator'=> 'before'
66 - ]
67 - );
68 - $this->add_responsive_control('content_align',
69 - [
70 - 'label' => esc_html__( 'Content Alignment', 'uicore-elements' ),
71 - 'type' => Controls_Manager::CHOOSE,
72 - 'options' => [
73 - 'left' => [
74 - 'title' => esc_html__( 'Left', 'uicore-elements' ),
75 - 'icon' => 'eicon-text-align-left',
76 - ],
77 - 'center' => [
78 - 'title' => esc_html__( 'Center', 'uicore-elements' ),
79 - 'icon' => 'eicon-text-align-center',
80 - ],
81 - ],
82 - 'selectors' => [
83 - '{{WRAPPER}}' => 'text-align: {{VALUE}};',
84 - ],
85 - ]
86 - );
87 - $this->end_controls_section();
65 + $this->add_control(
66 + 'meta_list',
67 + [
68 + 'label' => esc_html__('Meta Data', 'uicore-elements'),
69 + 'type' => \Elementor\Controls_Manager::REPEATER,
70 + 'fields' => $this->get_meta_content_controls(),
71 + 'default' => [
72 + [
73 + 'type' => 'author'
74 + ],
75 + ],
76 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
77 + 'prevent_empty' => false,
78 + 'separator' => 'before'
79 + ]
80 + );
81 + $this->add_responsive_control(
82 + 'content_align',
83 + [
84 + 'label' => esc_html__('Content Alignment', 'uicore-elements'),
85 + 'type' => Controls_Manager::CHOOSE,
86 + 'options' => [
87 + 'left' => [
88 + 'title' => esc_html__('Left', 'uicore-elements'),
89 + 'icon' => 'eicon-text-align-left',
90 + ],
91 + 'center' => [
92 + 'title' => esc_html__('Center', 'uicore-elements'),
93 + 'icon' => 'eicon-text-align-center',
94 + ],
95 + ],
96 + 'selectors' => [
97 + '{{WRAPPER}}' => 'text-align: {{VALUE}};',
98 + ],
99 + ]
100 + );
101 + $this->end_controls_section();
88 102
89 - $this->start_controls_section(
90 - 'section_meta_style',
91 - [
92 - 'label' => esc_html__( 'Style', 'uicore-elements' ),
93 - 'tab' => Controls_Manager::TAB_STYLE,
94 - ]
95 - );
96 - $this->get_meta_style_controls();
97 - $this->end_controls_section();
103 + $this->start_controls_section(
104 + 'section_meta_style',
105 + [
106 + 'label' => esc_html__('Style', 'uicore-elements'),
107 + 'tab' => Controls_Manager::TAB_STYLE,
108 + ]
109 + );
110 + $this->get_meta_style_controls();
111 + $this->end_controls_section();
112 + }
98 113
99 - }
114 + protected function display_dummy_text($meta_list)
115 + {
116 + echo '<div class="ui-e-post-meta ui-e-tb-meta">';
117 + foreach ($meta_list as $meta) {
118 + if ($meta['type'] != 'none') {
100 119
101 - /**
102 - * Match each meta icon size (if SVG) with the correspondent font size set by the user.
103 - *
104 - * Based on the post component similar function.
105 - */
106 - function set_meta_font_size_to_svg()
107 - {
108 - // Required specifically for SVG icons
109 - if( \Elementor\Plugin::$instance->experiments->is_feature_active('e_font_icon_svg') == false ){
110 - return;
111 - }
120 + $dummy_content = [
121 + 'excerpt' => esc_html__('This is a sample post excerpt. It provides a brief summary of the article, giving readers a quick preview of the content before they click through to read the full post.', 'uicore-elements'),
122 + 'comment' => rand(1, 5),
123 + 'reading time' => rand(1, 5)
124 + ];
112 125
113 - $size = $this->get_option_size(
114 - 'tb-meta_meta_typography_font_size',
115 - ['size' => 16, 'unit' => 'px'],
116 - true
117 - );
126 + // Print dummy content, if available
127 + if (array_key_exists($meta['type'], $dummy_content)) {
128 + $content = $dummy_content[$meta['type']];
118 129
119 - // Creates the css variable
120 - $metas_css = '--post_meta-font-size: ' . esc_html($size) . ';';
130 + // The content printing is the same from display_meta() and should follow up future changes
131 + $wrapper = '<div class="ui-e-meta-item">';
132 + $prefix = $meta['before'] ? '<span>' . esc_html($meta['before']) . '</span>' : '';
133 + $suffix = $meta['after'] ? '<span class="ui-e-meta-after">' . esc_html($meta['after']) . '</span>' : '';
121 134
122 - // print it on the main widget wrapper
123 - $this->add_render_attribute(
124 - '_wrapper',
125 - 'style',
126 - $metas_css
127 - );
135 + ob_start();
136 + \Elementor\Icons_Manager::render_icon($meta['icon'], ['aria-hidden' => 'true', 'class' => 'ui-e-meta-icon'], 'span');
137 + $icon = ob_get_clean();
138 +
139 + if (!empty($content)) {
140 + echo $wrapper . Helper::esc_svg($icon) . $prefix . $content . $suffix . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
141 + }
142 + } else {
143 + $this->display_meta($meta);
144 + }
145 +
146 + if (next($meta_list) && $this->get_settings_for_display('tb-meta_meta_separator')) {
147 + echo '<span class="ui-e-separator">' . esc_html($this->get_settings_for_display('tb-meta_meta_separator')) . '</span>';
148 + }
149 + }
150 + }
151 + echo '</div>';
128 152 }
129 153
130 - protected function render() {
154 + protected function render()
155 + {
156 + $meta_list = $this->get_settings_for_display('meta_list');
131 157
132 - if( !\Elementor\Plugin::$instance->editor->is_edit_mode() ) {
133 - $title = wp_title(null,false);
134 - $title = $title ? $title : get_bloginfo('name');
135 - }else{
136 - $title = __( 'This is a dummy title.', 'uicore-elements' );
158 + if (!isset($meta_list[0]) || $meta_list[0]['type'] == '') {
159 + return;
137 160 }
138 161
139 - $this->set_meta_font_size_to_svg();
140 -
141 - $meta_list = $this->get_settings_for_display( 'meta_list' );
142 - if(!isset($meta_list[0]) || $meta_list[0]['type'] == ''){
162 + if ($this->is_edit_mode()) {
163 + $this->display_dummy_text($meta_list);
143 164 return;
144 165 }
145 166
146 - echo '<div class="ui-e-post-meta ui-e-tb-meta">';
147 - foreach ($meta_list as $meta) {
148 - if($meta['type'] != 'none'){
149 - $this->display_meta($meta);
167 + echo '<div class="ui-e-post-meta ui-e-tb-meta">';
168 + foreach ($meta_list as $meta) {
169 + if ($meta['type'] != 'none') {
170 + $this->display_meta($meta);
150 171
151 - if( next( $meta_list ) && $this->get_settings_for_display( 'tb-meta_meta_separator' ) ) {
152 - echo '<span class="ui-e-separator">'.esc_html($this->get_settings_for_display('tb-meta_meta_separator' )).'</span>';
153 - }
172 + if (next($meta_list) && $this->get_settings_for_display('tb-meta_meta_separator')) {
173 + echo '<span class="ui-e-separator">' . esc_html($this->get_settings_for_display('tb-meta_meta_separator')) . '</span>';
154 174 }
155 175 }
156 - echo '</div>';
176 + }
177 + echo '</div>';
178 + }
157 179
158 - }
159 -
160 - protected function content_template() {
161 - }
180 + protected function content_template() {}
162 181 }
163 182 \Elementor\Plugin::instance()->widgets_manager->register(new PostMeta());