PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.3.17
UiCore Elements – Free widgets and templates for Elementor v1.3.17
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 1.2.4 All 41 releases
← All changes | includes/utils/post-component.php +906 -762 1.0.161.3.17 View file →
@@ -1,6 +1,8 @@
1 1 <?php
2 +
2 3 namespace UiCoreElements\Utils;
4 +
3 5 use Elementor\Controls_Manager;
4 6 use Elementor\Icons_Manager;
5 7 use Elementor\Plugin;
6 8
@@ -22,9 +24,10 @@
22 24 *
23 25 * @since 1.0.4
24 26 */
25 27
26 -trait Post_Trait {
28 +trait Post_Trait
29 +{
27 30
28 31 use Button_Trait,
29 32 Meta_Trait;
30 33
@@ -30,9 +33,9 @@
30 33
31 34 // Control Register Content functions
32 35 function TRAIT_register_post_item_controls($section = true)
33 36 {
34 - if($section) {
37 + if ($section) {
35 38 $this->start_controls_section(
36 39 'section_item_content',
37 40 [
38 41 'label' => esc_html__('Item', 'uicore-elements'),
@@ -38,92 +41,129 @@
38 41 'label' => esc_html__('Item', 'uicore-elements'),
39 42 ]
40 43 );
41 44 }
42 - $this->add_control(
43 - 'box_style',
44 - [
45 - 'label' => __('Item Style', 'uicore-elements'),
46 - 'type' => Controls_Manager::SELECT,
47 - 'default' => 'classic',
48 - 'options' => [
49 - 'classic' => __('Classic', 'uicore-elements'),
50 - 'split' => __('Split', 'uicore-elements'),
51 - 'overlay' => __('Overlay', 'uicore-elements'),
52 - ],
53 - 'render_type' => 'template',
54 - 'prefix_class' => 'ui-e-apg-',
45 + $this->add_control(
46 + 'box_style',
47 + [
48 + 'label' => __('Item Style', 'uicore-elements'),
49 + 'type' => Controls_Manager::SELECT,
50 + 'default' => 'classic',
51 + 'options' => [
52 + 'classic' => __('Classic', 'uicore-elements'),
53 + 'split' => __('Split', 'uicore-elements'),
54 + 'overlay' => __('Overlay', 'uicore-elements'),
55 + ],
56 + 'render_type' => 'template',
57 + 'prefix_class' => 'ui-e-apg-',
58 + ]
59 + );
60 + $this->add_control(
61 + 'split_mobile',
62 + [
63 + 'label' => __('Use Classic Layout on Mobile' . UICORE_ELEMENTS_NEW_OPTION, 'uicore-elements'), // TODO: remove badge, at least 2, releases after 1.3.15
64 + 'type' => Controls_Manager::SWITCHER,
65 + 'default' => 'ui-e-apg-split-not-phone',
66 + 'return_value' => 'ui-e-apg-split-not-phone',
67 + 'prefix_class' => '',
68 + 'condition' => [
69 + 'box_style' => 'split',
70 + ],
71 + ]
72 + );
73 + $this->add_control(
74 + 'image',
75 + [
76 + 'label' => __('Image', 'uicore-elements'),
77 + 'type' => Controls_Manager::SWITCHER,
78 + 'separator' => 'before',
79 + 'default' => 'yes'
80 + ]
81 + );
82 + $this->add_control(
83 + 'image_size_select',
84 + [
85 + 'label' => __('Image Size', 'uicore-elements'),
86 + 'type' => Controls_Manager::SELECT,
87 + 'default' => 'uicore-medium',
88 + 'options' => Helper::get_images_sizes(),
89 + 'separator' => 'after',
90 + 'condition' => [
91 + 'image' => 'yes',
55 92 ]
56 - );
57 - $this->add_control(
58 - 'image',
59 - [
60 - 'label' => __('Image', 'uicore-elements'),
61 - 'type' => Controls_Manager::SWITCHER,
62 - 'separator' => 'before',
63 - 'default' => 'yes'
93 + ]
94 + );
95 + $this->add_control(
96 + 'title',
97 + [
98 + 'label' => __('Title', 'uicore-elements'),
99 + 'type' => Controls_Manager::SWITCHER,
100 + 'default' => 'yes'
101 + ]
102 + );
103 + $this->add_control(
104 + 'title_tag',
105 + [
106 + 'label' => __('HTML Tag', 'uicore-elements'),
107 + 'type' => Controls_Manager::SELECT,
108 + 'default' => 'h4',
109 + 'options' => Helper::get_title_tags(),
110 + 'separator' => 'after',
111 + 'condition' => [
112 + 'title' => 'yes',
64 113 ]
65 - );
66 - $this->add_control(
67 - 'image_size_select',
68 - [
69 - 'label' => __('Image Size', 'uicore-elements'),
70 - 'type' => Controls_Manager::SELECT,
71 - 'default' => 'uicore-medium',
72 - 'options' => Helper::get_images_sizes(),
73 - 'separator' => 'after',
74 - 'condition' => [
75 - 'image' => 'yes',
76 - ]
114 + ]
115 + );
116 + $this->add_control(
117 + 'excerpt',
118 + [
119 + 'label' => __('Excerpt', 'uicore-elements'),
120 + 'type' => Controls_Manager::SWITCHER,
121 + 'default' => 'yes'
122 + ]
123 + );
124 + $this->add_control(
125 + 'excerpt_trim',
126 + [
127 + 'label' => __('Excerpt Length (words)', 'uicore-elements'),
128 + 'type' => Controls_Manager::NUMBER,
129 + 'min' => 5,
130 + 'max' => 100,
131 + 'step' => 1,
132 + 'default' => 55,
133 + 'separator' => 'after',
134 + 'condition' => array(
135 + 'excerpt' => 'yes',
136 + ),
137 + ]
138 + );
139 + $this->add_control(
140 + 'show_button',
141 + [
142 + 'label' => __('Read More Button', 'uicore-elements'),
143 + 'type' => Controls_Manager::SWITCHER,
144 + 'default' => 'no'
145 + ]
146 + );
147 + $this->add_control(
148 + 'global_link',
149 + [
150 + 'label' => __('Global Wrapper Link', 'uicore-elements'),
151 + 'type' => Controls_Manager::SWITCHER,
152 + 'default' => 'no',
153 + 'condition' => [
154 + 'box_style' => 'overlay'
77 155 ]
78 - );
79 - $this->add_control(
80 - 'title',
81 - [
82 - 'label' => __('Title', 'uicore-elements'),
83 - 'type' => Controls_Manager::SWITCHER,
84 - 'default' => 'yes'
85 - ]
86 - );
87 - $this->add_control(
88 - 'excerpt',
89 - [
90 - 'label' => __('Excerpt', 'uicore-elements'),
91 - 'type' => Controls_Manager::SWITCHER,
92 - 'default' => 'yes'
93 - ]
94 - );
95 - $this->add_control(
96 - 'excerpt_trim',
97 - [
98 - 'label' => __('Excerpt Length (words)', 'uicore-elements'),
99 - 'type' => Controls_Manager::NUMBER,
100 - 'min' => 5,
101 - 'max' => 100,
102 - 'step' => 1,
103 - 'default' => 55,
104 - 'separator' => 'after',
105 - 'condition' => array(
106 - 'excerpt' => 'yes',
107 - ),
108 - ]
109 - );
110 - $this->add_control(
111 - 'show_button',
112 - [
113 - 'label' => __('Read More Button', 'uicore-elements'),
114 - 'type' => Controls_Manager::SWITCHER,
115 - 'default' => 'no'
116 - ]
117 - );
156 + ]
157 + );
118 158
119 - if($section) {
159 + if ($section) {
120 160 $this->end_controls_section();
121 161 }
122 162 }
123 163 function TRAIT_register_post_button_controls($section = true)
124 164 {
125 - if($section){
165 + if ($section) {
126 166 $this->start_controls_section(
127 167 'section_button_content',
128 168 [
129 169 'label' => esc_html__('Button', 'uicore-elements'),
@@ -133,23 +173,23 @@
133 173 ]
134 174 );
135 175 }
136 176
137 - $this->register_button_content_controls(
138 - [
139 - 'section_condition' => [
140 - 'show_button' => 'yes'
141 - ],
142 - 'button_default_text' => 'Read More'
143 - ]
144 - );
145 - $this->remove_control('button_type');
146 - $this->remove_control('link');
147 - $this->remove_control('button_css_id');
148 - $this->remove_control('size');
149 - $this->remove_control('align');
177 + $this->register_button_content_controls(
178 + [
179 + 'section_condition' => [
180 + 'show_button' => 'yes'
181 + ],
182 + 'button_default_text' => 'Read More'
183 + ]
184 + );
185 + $this->remove_control('button_type');
186 + $this->remove_control('link');
187 + $this->remove_control('button_css_id');
188 + $this->remove_control('size');
189 + $this->remove_control('align');
150 190
151 - if($section){
191 + if ($section) {
152 192 $this->end_controls_section();
153 193 }
154 194 }
155 195 /**
@@ -159,9 +199,9 @@
159 199 * @param bool $product_metas. If true, will only print options that relates with products.
160 200 */
161 201 function TRAIT_register_post_meta_controls($section = true, $product_metas = false)
162 202 {
163 - if($section){
203 + if ($section) {
164 204 $this->start_controls_section(
165 205 'section_extra_item_content',
166 206 [
167 207 'label' => esc_html__('Meta', 'uicore-elements'),
@@ -168,79 +208,85 @@
168 208 ]
169 209 );
170 210 }
171 211
172 - $this->add_control(
173 - 'top_meta',
174 - [
175 - 'label' => esc_html__('Top Meta', 'uicore-elements'),
176 - 'type' => \Elementor\Controls_Manager::REPEATER,
177 - 'fields' => $this->get_meta_content_controls($product_metas),
178 - 'default' => [
179 - [
180 - 'type' => $product_metas ? 'product sale' : 'category'
181 - ],
212 + $this->add_control(
213 + 'top_meta',
214 + [
215 + 'label' => esc_html__('Top Meta', 'uicore-elements'),
216 + 'type' => \Elementor\Controls_Manager::REPEATER,
217 + 'fields' => $this->get_meta_content_controls($product_metas),
218 + 'default' => [
219 + [
220 + 'type' => $product_metas ? 'product sale' : 'category'
182 221 ],
183 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
184 - 'prevent_empty' => false,
185 - 'separator' => 'before'
186 - ]
187 - );
188 - $this->add_control(
189 - 'before_title_meta',
190 - [
191 - 'label' => esc_html__('Before Title Meta', 'uicore-elements'),
192 - 'type' => \Elementor\Controls_Manager::REPEATER,
193 - 'fields' => $this->get_meta_content_controls($product_metas),
194 - 'default' => [
195 - [
196 - 'type' => $product_metas ? 'none' : 'author'
197 - ],
222 + ],
223 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
224 + 'prevent_empty' => false,
225 + 'separator' => 'before'
226 + ]
227 + );
228 + $this->add_control(
229 + 'before_title_meta',
230 + [
231 + 'label' => esc_html__('Before Title Meta', 'uicore-elements'),
232 + 'type' => \Elementor\Controls_Manager::REPEATER,
233 + 'fields' => $this->get_meta_content_controls($product_metas),
234 + 'default' => [
235 + [
236 + 'type' => $product_metas ? 'none' : 'author'
198 237 ],
199 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
200 - 'prevent_empty' => false,
201 - 'separator' => 'before',
202 - ]
203 - );
204 - $this->add_control(
205 - 'after_title_meta',
206 - [
207 - 'label' => esc_html__('After Title Meta', 'uicore-elements'),
208 - 'type' => \Elementor\Controls_Manager::REPEATER,
209 - 'fields' => $this->get_meta_content_controls($product_metas),
210 - 'default' => [
211 - [
212 - 'type' => $product_metas ? 'product price' : 'date'
213 - ],
238 + ],
239 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
240 + 'prevent_empty' => false,
241 + 'separator' => 'before',
242 + ]
243 + );
244 + $this->add_control(
245 + 'after_title_meta',
246 + [
247 + 'label' => esc_html__('After Title Meta', 'uicore-elements'),
248 + 'type' => \Elementor\Controls_Manager::REPEATER,
249 + 'fields' => $this->get_meta_content_controls($product_metas),
250 + 'default' => [
251 + [
252 + 'type' => $product_metas ? 'product price' : 'date'
214 253 ],
215 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
216 - 'prevent_empty' => false,
217 - 'separator' => 'before',
218 - ]
219 - );
220 - $this->add_control(
221 - 'bottom_meta',
222 - [
223 - 'label' => esc_html__('Bottom Meta', 'uicore-elements'),
224 - 'type' => \Elementor\Controls_Manager::REPEATER,
225 - 'fields' => $this->get_meta_content_controls($product_metas),
226 - 'default' => [
227 - [
228 - 'type' => $product_metas ? 'none' : 'none'
229 - ],
254 + ],
255 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
256 + 'prevent_empty' => false,
257 + 'separator' => 'before',
258 + ]
259 + );
260 + $this->add_control(
261 + 'bottom_meta',
262 + [
263 + 'label' => esc_html__('Bottom Meta', 'uicore-elements'),
264 + 'type' => \Elementor\Controls_Manager::REPEATER,
265 + 'fields' => $this->get_meta_content_controls($product_metas),
266 + 'default' => [
267 + [
268 + 'type' => $product_metas ? 'none' : 'none'
230 269 ],
231 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
232 - 'prevent_empty' => false,
233 - 'separator' => 'before',
234 - ]
235 - );
236 - if($section){
270 + ],
271 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
272 + 'prevent_empty' => false,
273 + 'separator' => 'before',
274 + ]
275 + );
276 + if ($section) {
237 277 $this->end_controls_section();
238 278 }
239 279 }
240 280 function TRAIT_register_post_query_controls($section = true)
241 281 {
242 - if($section){
282 +
283 + // In some contexts, such as theme-builder, our custom controls are not available
284 + if (! class_exists('UiCoreElements\Controls\Post_Filter')) {
285 + require_once UICORE_ELEMENTS_INCLUDES . '/controls/class-post-filter-control.php';
286 + }
287 +
288 + if ($section) {
243 289 $this->start_controls_section(
244 290 'section_post_grid_def',
245 291 [
246 292 'label' => esc_html__('Query', 'uicore-elements'),
@@ -247,87 +293,115 @@
247 293 ]
248 294 );
249 295 }
250 296
251 - $this->add_group_control(
252 - Post_Filter::get_type(),
253 - [
254 - 'name' => 'posts-filter',
255 - 'label' => esc_html__('Posts', 'uicore-elements'),
256 - 'description' => esc_html__('Current Query Settings > Reading', 'uicore-elements'),
257 - ]
258 - );
259 - $this->add_control(
260 - 'item_limit',
261 - [
262 - 'label' => esc_html__('Item Limit', 'uicore-elements'),
263 - 'type' => Controls_Manager::SLIDER,
264 - 'reder_type' => 'template',
265 - 'range' => [
266 - 'px' => [
267 - 'min' => -1,
268 - 'max' => 100,
269 - ],
297 + $this->add_group_control(
298 + Post_Filter::get_type(),
299 + [
300 + 'name' => 'posts-filter',
301 + 'label' => esc_html__('Posts', 'uicore-elements'),
302 + 'description' => esc_html__('Current Query Settings > Reading', 'uicore-elements'),
303 + ]
304 + );
305 + $this->add_control(
306 + 'item_order',
307 + [
308 + 'label' => esc_html__('Item Order', 'uicore-elements'),
309 + 'type' => Controls_Manager::SELECT,
310 + 'options' => [
311 + 'ASC' => esc_html__('Ascending', 'uicore-elements'),
312 + 'DESC' => esc_html__('Descending', 'uicore-elements'),
313 + ],
314 + 'default' => 'DESC',
315 + ]
316 + );
317 + $this->add_control(
318 + 'item_order_by',
319 + [
320 + 'label' => esc_html__('Item Order By', 'uicore-elements'),
321 + 'type' => Controls_Manager::SELECT,
322 + 'options' => [
323 + 'date' => esc_html__('Date', 'uicore-elements'),
324 + 'modified' => esc_html__('Modified Date', 'uicore-elements'),
325 + 'title' => esc_html__('Title', 'uicore-elements'),
326 + 'rand' => esc_html__('Random', 'uicore-elements'),
327 + 'comment_count' => esc_html__('Comments Count', 'uicore-elements'),
328 + 'menu_order' => esc_html__('Menu Order', 'uicore-elements'),
329 + ],
330 + 'default' => 'date',
331 + ]
332 + );
333 + $this->add_control(
334 + 'item_limit',
335 + [
336 + 'label' => esc_html__('Item Limit', 'uicore-elements'),
337 + 'type' => Controls_Manager::SLIDER,
338 + 'reder_type' => 'template',
339 + 'range' => [
340 + 'px' => [
341 + 'min' => -1,
342 + 'max' => 100,
270 343 ],
271 - 'default' => [
272 - 'size' => 3,
273 - ],
274 - 'condition' => array(
275 - 'posts-filter_post_type!' => 'current',
276 - ),
277 - ]
278 - );
344 + ],
345 + 'default' => [
346 + 'size' => 3,
347 + ],
348 + 'condition' => array(
349 + 'posts-filter_post_type!' => 'current',
350 + ),
351 + ]
352 + );
279 353
280 - $this->add_control(
281 - 'offset',
282 - [
283 - 'label' => esc_html__('Query Offset', 'uicore-elements'),
284 - 'type' => Controls_Manager::SLIDER,
285 - 'render_type' => 'template',
286 - 'range' => [
287 - 'px' => [
288 - 'min' => -1,
289 - 'max' => 10,
290 - ],
354 + $this->add_control(
355 + 'offset',
356 + [
357 + 'label' => esc_html__('Query Offset', 'uicore-elements'),
358 + 'type' => Controls_Manager::SLIDER,
359 + 'render_type' => 'template',
360 + 'range' => [
361 + 'px' => [
362 + 'min' => -1,
363 + 'max' => 10,
291 364 ],
292 - 'default' => [
293 - 'size' => 0,
294 - ],
295 - 'condition' => [
296 - 'pagination_type' => 'numbers',
297 - ]
365 + ],
366 + 'default' => [
367 + 'size' => 0,
368 + ],
369 + 'condition' => [
370 + 'pagination_type' => 'numbers',
298 371 ]
299 - );
372 + ]
373 + );
300 374
301 - $this->add_control(
302 - 'offset_alert',
303 - [
304 - 'type' => Controls_Manager::ALERT,
305 - 'alert_type' => 'info',
306 - 'content' => esc_html__('Offset is disabled with Load More pagination.', 'uicore-elements'),
307 - 'condition' => [
308 - 'pagination_type!' => 'numbers',
309 - ]
375 + $this->add_control(
376 + 'offset_alert',
377 + [
378 + 'type' => Controls_Manager::ALERT,
379 + 'alert_type' => 'info',
380 + 'content' => esc_html__('Offset is disabled with Load More pagination.', 'uicore-elements'),
381 + 'condition' => [
382 + 'pagination_type!' => 'numbers',
310 383 ]
311 - );
384 + ]
385 + );
312 386
313 - $this->add_control(
314 - 'sticky',
315 - [
316 - 'label' => esc_html__('Sticky Posts', 'uicore-elements'),
317 - 'type' => Controls_Manager::SWITCHER,
318 - 'label_on' => esc_html__('Show', 'uicore-elements'),
319 - 'label_off' => esc_html__('Hide', 'uicore-elements'),
320 - 'description' => esc_html__('Sticky posts works only on the front-end.', 'uicore-elements'),
321 - 'return_value' => 1,
322 - 'default' => 0,
323 - 'condition' => [
324 - 'pagination!' => 'yes',
325 - ],
326 - ]
327 - );
387 + $this->add_control(
388 + 'sticky',
389 + [
390 + 'label' => esc_html__('Sticky Posts', 'uicore-elements'),
391 + 'type' => Controls_Manager::SWITCHER,
392 + 'label_on' => esc_html__('Show', 'uicore-elements'),
393 + 'label_off' => esc_html__('Hide', 'uicore-elements'),
394 + 'description' => esc_html__('Sticky posts works only on the front-end.', 'uicore-elements'),
395 + 'return_value' => 1,
396 + 'default' => 0,
397 + 'condition' => [
398 + 'pagination!' => 'yes',
399 + ],
400 + ]
401 + );
328 402
329 - if($section){
403 + if ($section) {
330 404 $this->end_controls_section();
331 405 }
332 406 }
333 407
@@ -333,9 +407,9 @@
333 407
334 408 // Control Register Styles functions
335 409 function TRAIT_register_post_item_style_controls($section = true, $active_tab = false)
336 410 {
337 - if($section){
411 + if ($section) {
338 412 $this->start_controls_section(
339 413 'section_style_item',
340 414 [
341 415 'label' => __('Item Style', 'uicore-elements'),
@@ -343,101 +417,132 @@
343 417 ]
344 418 );
345 419 }
346 420
347 - $this->start_controls_tabs(
348 - 'item_border_shadow'
349 - );
421 + $this->start_controls_tabs(
422 + 'item_border_shadow'
423 + );
350 424
351 - $this->start_controls_tab(
352 - 'item_bs_normal_tab',
353 - [
354 - 'label' => esc_html__('Normal', 'plugin-name'),
355 - ]
356 - );
357 - $this->add_group_control(
358 - Group_Control_Border::get_type(),
359 - [
360 - 'name' => 'item_border',
361 - 'selector' => '{{WRAPPER}} .ui-e-item article',
362 - ]
363 - );
364 - $this->add_group_control(
365 - Group_Control_Box_Shadow::get_type(),
366 - [
367 - 'name' => 'item_shadow',
368 - 'selector' => '{{WRAPPER}} .ui-e-item article',
369 - ]
370 - );
371 - $this->end_controls_tab();
425 + $this->start_controls_tab(
426 + 'item_bs_normal_tab',
427 + [
428 + 'label' => esc_html__('Normal', 'uicore-elements'),
429 + ]
430 + );
431 + $this->add_group_control(
432 + Group_Control_Background::get_type(),
433 + [
434 + 'name' => 'content_bg',
435 + 'types' => ['classic', 'gradient'],
436 + 'selector' => '{{WRAPPER}} .ui-e-item article',
437 + ]
438 + );
439 + $this->add_group_control(
440 + Group_Control_Border::get_type(),
441 + [
442 + 'name' => 'item_border',
443 + 'selector' => '{{WRAPPER}} .ui-e-item article',
444 + ]
445 + );
446 + $this->add_group_control(
447 + Group_Control_Box_Shadow::get_type(),
448 + [
449 + 'name' => 'item_shadow',
450 + 'selector' => '{{WRAPPER}} .ui-e-item article',
451 + ]
452 + );
453 + $this->end_controls_tab();
372 454
373 - $this->start_controls_tab(
374 - 'item_bs_hover_tab',
375 - [
376 - 'label' => esc_html__('Hover', 'plugin-name'),
377 - ]
378 - );
379 - $this->add_group_control(
380 - Group_Control_Border::get_type(),
381 - [
382 - 'name' => 'item_border_hover',
383 - 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
384 - ]
385 - );
386 - $this->add_group_control(
387 - Group_Control_Box_Shadow::get_type(),
388 - [
389 - 'name' => 'item_shadow_hover',
390 - 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
391 - ]
392 - );
393 - $this->end_controls_tab();
455 + $this->start_controls_tab(
456 + 'item_bs_hover_tab',
457 + [
458 + 'label' => esc_html__('Hover', 'uicore-elements'),
459 + ]
460 + );
461 + $this->add_group_control(
462 + Group_Control_Background::get_type(),
463 + [
464 + 'name' => 'content_bg_hover',
465 + 'types' => ['classic', 'gradient'],
466 + 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
467 + ]
468 + );
469 + $this->add_group_control(
470 + Group_Control_Border::get_type(),
471 + [
472 + 'name' => 'item_border_hover',
473 + 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
474 + ]
475 + );
476 + $this->add_group_control(
477 + Group_Control_Box_Shadow::get_type(),
478 + [
479 + 'name' => 'item_shadow_hover',
480 + 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
481 + ]
482 + );
483 + $this->end_controls_tab();
394 484
395 - if($active_tab){
396 - $this->start_controls_tab(
397 - 'item_bs_active_tab',
398 - [
399 - 'label' => esc_html__('Active', 'plugin-name'),
400 - ]
401 - );
402 - $this->add_group_control(
403 - Group_Control_Border::get_type(),
404 - [
405 - 'name' => 'item_border_active',
406 - 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article',
407 - ]
408 - );
409 - $this->add_group_control(
410 - Group_Control_Box_Shadow::get_type(),
411 - [
412 - 'name' => 'item_shadow_active',
413 - 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article',
414 - ]
415 - );
416 - $this->end_controls_tab();
417 - }
418 -
419 - $this->end_controls_tabs();
420 -
421 - $this->add_control(
422 - 'item_radius',
485 + if ($active_tab) {
486 + $this->start_controls_tab(
487 + 'item_bs_active_tab',
423 488 [
424 - 'label' => esc_html__('Border Radius', 'uicore-elements'),
425 - 'type' => Controls_Manager::DIMENSIONS,
426 - 'separator' => 'before',
427 - 'selectors' => [
428 - '{{WRAPPER}} ' => '--ui-e-border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;'
429 - ],
489 + 'label' => esc_html__('Active', 'uicore-elements'),
430 490 ]
431 491 );
492 + $this->add_group_control(
493 + Group_Control_Border::get_type(),
494 + [
495 + 'name' => 'item_border_active',
496 + 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article',
497 + ]
498 + );
499 + $this->add_group_control(
500 + Group_Control_Box_Shadow::get_type(),
501 + [
502 + 'name' => 'item_shadow_active',
503 + 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article',
504 + ]
505 + );
506 + $this->end_controls_tab();
507 + }
432 508
433 - if($section){
509 + $this->end_controls_tabs();
510 +
511 + $this->add_control(
512 + 'item_padding',
513 + [
514 + 'label' => esc_html__('Padding', 'uicore-elements'),
515 + 'type' => Controls_Manager::DIMENSIONS,
516 + 'size_units' => ['px', 'em', 'rem', '%'],
517 + 'separator' => 'before',
518 + 'selectors' => [
519 + '{{WRAPPER}} .ui-e-item article' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
520 + ],
521 + 'condition' => array(
522 + 'box_style!' => 'overlay',
523 + ),
524 + ]
525 +
526 + );
527 + $this->add_control(
528 + 'item_radius',
529 + [
530 + 'label' => esc_html__('Border Radius', 'uicore-elements'),
531 + 'type' => Controls_Manager::DIMENSIONS,
532 + 'selectors' => [
533 + '{{WRAPPER}} ' => '--ui-e-border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;'
534 + ],
535 + ]
536 + );
537 +
538 + if ($section) {
434 539 $this->end_controls_section();
435 540 }
436 541 }
437 542 function TRAIT_register_post_content_style_controls($section = true)
438 543 {
439 - if($section){
544 + if ($section) {
440 545 $this->start_controls_section(
441 546 'section_style_content',
442 547 [
443 548 'label' => __('Content Style', 'uicore-elements'),
@@ -444,230 +549,302 @@
444 549 'tab' => Controls_Manager::TAB_STYLE,
445 550 ]
446 551 );
447 552 }
448 - $this->add_control(
449 - 'image_size',
450 - [
451 - 'label' => __('Image Height (%)', 'uicore-elements'),
452 - 'type' => Controls_Manager::NUMBER,
453 - 'min' => 1,
454 - 'max' => 500,
455 - 'step' => 1,
456 - 'default' => 57,
457 - 'selectors' => [
458 - '{{WRAPPER}} .ui-e-post-top' => '--ui-e-img-size: {{VALUE}}',
553 + $this->add_responsive_control(
554 + 'image_size',
555 + [
556 + 'label' => __('Image Height (%)', 'uicore-elements'),
557 + 'type' => Controls_Manager::NUMBER,
558 + 'min' => 1,
559 + 'max' => 500,
560 + 'step' => 1,
561 + 'default' => 57,
562 + 'selectors' => [
563 + '{{WRAPPER}} .ui-e-post-top' => '--ui-e-img-size: {{VALUE}}',
564 + ],
565 + 'condition' => [
566 + 'masonry!' => 'ui-e-maso',
567 + ],
568 + ]
569 + );
570 + $this->add_responsive_control(
571 + 'image_position',
572 + [
573 + 'label' => __('Image Position', 'uicore-elements'),
574 + 'type' => Controls_Manager::SELECT,
575 + 'default' => 'center center',
576 + 'tablet_default' => '',
577 + 'mobile_default' => '',
578 + 'options' => [
579 + '' => esc_html__('Default', 'uicore-elements'),
580 + 'left top' => esc_html__('Left Top', 'uicore-elements'),
581 + 'left center' => esc_html__('Left Center', 'uicore-elements'),
582 + 'left bottom' => esc_html__('Left Bottom', 'uicore-elements'),
583 + 'center top' => esc_html__('Center Top', 'uicore-elements'),
584 + 'center center' => esc_html__('Center Center', 'uicore-elements'),
585 + 'center bottom' => esc_html__('Center Bottom', 'uicore-elements'),
586 + 'right top' => esc_html__('Right Top', 'uicore-elements'),
587 + 'right center' => esc_html__('Right Center', 'uicore-elements'),
588 + 'right bottom' => esc_html__('Right Bottom', 'uicore-elements'),
589 + ],
590 + 'selectors' => [
591 + '{{WRAPPER}} .ui-e-post-img' => 'background-position: {{VALUE}}',
592 + ],
593 + ]
594 + );
595 + $this->add_responsive_control(
596 + 'image_fit',
597 + [
598 + 'label' => __('Image Fit', 'uicore-elements'),
599 + 'type' => Controls_Manager::SELECT,
600 + 'default' => 'cover',
601 + 'tablet_default' => '',
602 + 'mobile_default' => '',
603 + 'options' => [
604 + '' => esc_html__('Default', 'uicore-elements'),
605 + 'cover' => esc_html__('Cover', 'uicore-elements'),
606 + 'contain' => esc_html__('Contain', 'uicore-elements'),
607 + 'auto' => esc_html__('Auto', 'uicore-elements'),
608 + ],
609 + 'selectors' => [
610 + '{{WRAPPER}} .ui-e-post-img' => 'background-size: {{VALUE}}',
611 + ],
612 + ]
613 + );
614 + $this->add_control(
615 + 'image_radius',
616 + [
617 + 'label' => esc_html__('Border Radius', 'uicore-elements'),
618 + 'type' => Controls_Manager::DIMENSIONS,
619 + 'size_units' => ['px', 'em', '%'],
620 + 'selectors' => [
621 + '{{WRAPPER}} .ui-e-post-top' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}px {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
622 + ],
623 + 'condition' => array(
624 + 'box_style!' => 'overlay',
625 + ),
626 + ]
627 + );
628 + $this->add_group_control(
629 + Group_Control_Box_Shadow::get_type(),
630 + [
631 + 'name' => 'image_shadow',
632 + 'label' => esc_html__('Box Shadow', 'uicore-elements'),
633 + 'selector' => '{{WRAPPER}} .ui-e-post-top',
634 + 'condition' => array(
635 + 'box_style!' => 'overlay',
636 + ),
637 + ]
638 + );
639 + $this->add_responsive_control(
640 + 'content_alignment',
641 + [
642 + 'label' => esc_html__('Content Alignment', 'uicore-elements'),
643 + 'type' => Controls_Manager::CHOOSE,
644 + 'options' => [
645 + 'start' => [
646 + 'title' => esc_html__('Left', 'uicore-elements'),
647 + 'icon' => 'eicon-text-align-left',
459 648 ],
460 - 'condition' => [
461 - 'masonry!' => 'ui-e-maso',
649 + 'center' => [
650 + 'title' => esc_html__('Center', 'uicore-elements'),
651 + 'icon' => 'eicon-text-align-center',
462 652 ],
463 - ]
464 - );
465 - $this->add_control(
466 - 'image_overflow',
467 - [
468 - 'label' => __('Independent Border Radius and Shadow', 'uicore-elements'),
469 - 'type' => Controls_Manager::SWITCHER,
470 - 'default' => 'no',
471 - 'prefix_class' => 'ui-e-post-ovf-',
472 - 'condition' => array(
473 - 'box_style!' => 'overlay',
474 - ),
475 - ]
476 - );
477 - $this->add_control(
478 - 'image_radius',
479 - [
480 - 'label' => esc_html__('Border Radius', 'uicore-elements'),
481 - 'type' => Controls_Manager::DIMENSIONS,
482 - 'selectors' => [
483 - '{{WRAPPER}} .ui-e-post-top' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;'
653 + 'end' => [
654 + 'title' => esc_html__('Right', 'uicore-elements'),
655 + 'icon' => 'eicon-text-align-right',
484 656 ],
485 - 'condition' => array(
486 - 'image_overflow' => 'yes',
487 - ),
488 - ]
489 - );
490 - $this->add_group_control(
491 - Group_Control_Box_Shadow::get_type(),
492 - [
493 - 'name' => 'image_shadow',
494 - 'label' => esc_html__('Box Shadow', 'uicore-elements'),
495 - 'selector' => '{{WRAPPER}} .ui-e-post-top',
496 - 'condition' => array(
497 - 'image_overflow' => 'yes',
498 - ),
499 - ]
500 - );
501 - $this->add_responsive_control(
502 - 'content_alignment',
503 - [
504 - 'label' => esc_html__('Content Alignment', 'uicore-elements'),
505 - 'type' => Controls_Manager::CHOOSE,
506 - 'options' => [
507 - 'left' => [
508 - 'title' => esc_html__('Left', 'uicore-elements'),
509 - 'icon' => 'eicon-text-align-left',
510 - ],
511 - 'center' => [
512 - 'title' => esc_html__('Center', 'uicore-elements'),
513 - 'icon' => 'eicon-text-align-center',
514 - ],
515 - 'stretch' => [
516 - 'title' => esc_html__('Justified', 'uicore-elements'),
517 - 'icon' => 'eicon-text-align-justify',
518 - ],
657 + 'stretch' => [
658 + 'title' => esc_html__('Justified', 'uicore-elements'),
659 + 'icon' => 'eicon-text-align-justify',
519 660 ],
520 - 'selectors' => [
521 - '{{WRAPPER}} .ui-e-post-content' => 'align-items: {{VALUE}}; text-align: {{VALUE}};',
661 + ],
662 + 'selectors_dictionary' => [
663 + 'left' => 'start',
664 + ],
665 + 'default' => is_rtl() ? 'end' : 'start',
666 + 'selectors' => [
667 + '{{WRAPPER}} .ui-e-post-content' => 'align-items: {{VALUE}}; text-align: {{VALUE}};',
668 + ],
669 + ]
670 + );
671 + $this->add_control(
672 + 'title_color',
673 + [
674 + 'label' => esc_html__('Title Color', 'uicore-elements'),
675 + 'type' => Controls_Manager::COLOR,
676 + 'default' => '',
677 + 'separator' => 'before',
678 + 'selectors' => [
679 + '{{WRAPPER}} .ui-e-post-title' => 'color: {{VALUE}};',
680 + ],
681 + ]
682 + );
683 + $this->add_control(
684 + 'title_hcolor',
685 + [
686 + 'label' => esc_html__('Title Hover Color', 'uicore-elements'),
687 + 'type' => Controls_Manager::COLOR,
688 + 'default' => '',
689 + 'selectors' => [
690 + '{{WRAPPER}} .ui-e-post-title:hover' => 'color: {{VALUE}};',
691 + ],
692 + ]
693 + );
694 + $this->add_group_control(
695 + Group_Control_Typography::get_type(),
696 + [
697 + 'name' => 'title_typography',
698 + 'label' => esc_html__('Title Typography', 'uicore-elements'),
699 + 'selector' => '{{WRAPPER}} .ui-e-post-title',
700 + ]
701 + );
702 + $this->add_responsive_control(
703 + 'title_gap',
704 + [
705 + 'label' => __('Title Top Space', 'uicore-elements'),
706 + 'type' => Controls_Manager::SLIDER,
707 + 'size_units' => ['em'],
708 + 'separator' => 'after',
709 + 'range' => [
710 + 'px' => [
711 + 'min' => 0,
712 + 'max' => 3,
713 + 'step' => 0.1,
522 714 ],
523 - ]
524 - );
525 - $this->add_control(
526 - 'title_color',
527 - [
528 - 'label' => esc_html__('Title Color', 'uicore-elements'),
529 - 'type' => Controls_Manager::COLOR,
530 - 'default' => '',
531 - 'separator' => 'before',
532 - 'selectors' => [
533 - '{{WRAPPER}} .ui-e-post-title' => 'color: {{VALUE}};',
715 + ],
716 + 'default' => [
717 + 'unit' => 'em',
718 + 'size' => 1.2,
719 + ],
720 + 'selectors' => [
721 + '{{WRAPPER}} .ui-e-post-title' => 'margin-top: {{SIZE}}em;',
722 + ],
723 + ]
724 + );
725 + $this->add_control(
726 + 'text_color',
727 + [
728 + 'label' => esc_html__('Excerpt Color', 'uicore-elements'),
729 + 'type' => Controls_Manager::COLOR,
730 + 'default' => '',
731 + 'selectors' => [
732 + '{{WRAPPER}} .ui-e-post-text' => 'color: {{VALUE}};',
733 + ],
734 + ]
735 + );
736 + $this->add_group_control(
737 + Group_Control_Typography::get_type(),
738 + [
739 + 'name' => 'text_typography',
740 + 'label' => esc_html__('Excerpt Typography', 'uicore-elements'),
741 + 'selector' => '{{WRAPPER}} .ui-e-post-text',
742 + ]
743 + );
744 + $this->add_responsive_control(
745 + 'text_gap',
746 + [
747 + 'label' => __('Excerpt Top Space', 'uicore-elements'),
748 + 'type' => Controls_Manager::SLIDER,
749 + 'size_units' => ['em'],
750 + 'separator' => 'after',
751 + 'range' => [
752 + 'px' => [
753 + 'min' => 0,
754 + 'max' => 3,
755 + 'step' => 0.1,
534 756 ],
535 - ]
536 - );
537 - $this->add_control(
538 - 'title_hcolor',
539 - [
540 - 'label' => esc_html__('Title Hover Color', 'uicore-elements'),
541 - 'type' => Controls_Manager::COLOR,
542 - 'default' => '',
543 - 'selectors' => [
544 - '{{WRAPPER}} .ui-e-post-title:hover' => 'color: {{VALUE}};',
757 + ],
758 + 'default' => [
759 + 'unit' => 'em',
760 + 'size' => 0.8,
761 + ],
762 + 'selectors' => [
763 + '{{WRAPPER}} .ui-e-post-text' => 'margin-top: {{SIZE}}em;',
764 + ],
765 + ]
766 + );
767 + $this->add_group_control(
768 + Group_Control_Background::get_type(),
769 + [
770 + 'name' => 'content_background',
771 + 'selector' => '{{WRAPPER}} .ui-e-post-content',
772 + ]
773 + );
774 + $this->add_group_control(
775 + Group_Control_Background::get_type(),
776 + [
777 + 'name' => 'content_background_hover',
778 + 'selector' => '{{WRAPPER}} .ui-e-item:hover .ui-e-post-content',
779 + 'fields_options' => [
780 + 'background' => [
781 + 'label' => esc_html__('Hover Background', 'uicore-elements'),
545 782 ],
783 + ],
784 + 'condition' => [
785 + 'box_style' => 'overlay',
546 786 ]
547 - );
548 - $this->add_group_control(
549 - Group_Control_Typography::get_type(),
550 - [
551 - 'name' => 'title_typography',
552 - 'label' => esc_html__('Title Typography', 'uicore-elements'),
553 - 'selector' => '{{WRAPPER}} .ui-e-post-title',
787 + ]
788 + );
789 + $this->add_responsive_control(
790 + 'content_padding',
791 + [
792 + 'label' => esc_html__('Content Padding', 'uicore-elements'),
793 + 'type' => Controls_Manager::DIMENSIONS,
794 + 'size_units' => ['px', 'em', '%'],
795 + 'selectors' => [
796 + '{{WRAPPER}} .ui-e-post-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
554 797 ]
555 - );
556 - $this->add_control(
557 - 'title_gap',
558 - [
559 - 'label' => __('Title Top Space', 'uicore-elements'),
560 - 'type' => Controls_Manager::SLIDER,
561 - 'size_units' => ['em'],
562 - 'separator' => 'after',
563 - 'range' => [
564 - 'px' => [
565 - 'min' => 0,
566 - 'max' => 3,
567 - 'step' => 0.1,
568 - ],
798 + ]
799 + );
800 + $this->add_control(
801 + 'content_radius',
802 + [
803 + 'label' => esc_html__('Content Border Radius', 'uicore-elements'),
804 + 'type' => Controls_Manager::DIMENSIONS,
805 + 'selectors' => [
806 + '{{WRAPPER}} .ui-e-post-content' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;'
807 + ],
808 + 'condition' => array(
809 + 'box_style!' => 'overlay',
810 + ),
811 + ]
812 + );
813 + $this->add_control(
814 + 'content_gap',
815 + [
816 + 'label' => __('Content Space', 'uicore-elements'),
817 + 'type' => Controls_Manager::SLIDER,
818 + 'size_units' => ['em'],
819 + 'separator' => 'after',
820 + 'range' => [
821 + 'px' => [
822 + 'min' => 0,
823 + 'max' => 3,
824 + 'step' => 0.1,
569 825 ],
570 - 'default' => [
571 - 'unit' => 'em',
572 - 'size' => 1.2,
573 - ],
574 - 'selectors' => [
575 - '{{WRAPPER}} .ui-e-post-title' => 'margin-top: {{SIZE}}em;',
576 - ],
577 - ]
578 - );
579 - $this->add_control(
580 - 'text_color',
581 - [
582 - 'label' => esc_html__('Excerpt Color', 'uicore-elements'),
583 - 'type' => Controls_Manager::COLOR,
584 - 'default' => '',
585 - 'selectors' => [
586 - '{{WRAPPER}} .ui-e-post-text' => 'color: {{VALUE}};',
587 - ],
588 - ]
589 - );
590 - $this->add_group_control(
591 - Group_Control_Typography::get_type(),
592 - [
593 - 'name' => 'text_typography',
594 - 'label' => esc_html__('Excerpt Typography', 'uicore-elements'),
595 - 'selector' => '{{WRAPPER}} .ui-e-post-text',
596 - ]
597 - );
598 - $this->add_control(
599 - 'text_gap',
600 - [
601 - 'label' => __('Excerpt Top Space', 'uicore-elements'),
602 - 'type' => Controls_Manager::SLIDER,
603 - 'size_units' => ['em'],
604 - 'separator' => 'after',
605 - 'range' => [
606 - 'px' => [
607 - 'min' => 0,
608 - 'max' => 3,
609 - 'step' => 0.1,
610 - ],
611 - ],
612 - 'default' => [
613 - 'unit' => 'em',
614 - 'size' => 0.8,
615 - ],
616 - 'selectors' => [
617 - '{{WRAPPER}} .ui-e-post-text' => 'margin-top: {{SIZE}}em;',
618 - ],
619 - ]
620 - );
621 - $this->add_responsive_control(
622 - 'content_padding',
623 - [
624 - 'label' => esc_html__('Content Padding', 'uicore-elements'),
625 - 'type' => Controls_Manager::DIMENSIONS,
626 - 'size_units' => ['px', 'em', '%'],
627 - 'selectors' => [
628 - '{{WRAPPER}} .ui-e-post-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
629 - ]
630 - ]
631 - );
632 - $this->add_control(
633 - 'content_gap',
634 - [
635 - 'label' => __('Content Space', 'uicore-elements'),
636 - 'type' => Controls_Manager::SLIDER,
637 - 'size_units' => ['em'],
638 - 'separator' => 'after',
639 - 'range' => [
640 - 'px' => [
641 - 'min' => 0,
642 - 'max' => 3,
643 - 'step' => 0.1,
644 - ],
645 - ],
646 - 'default' => [
647 - 'unit' => 'em',
648 - 'size' => 0,
649 - ],
650 - 'selectors' => [
651 - '{{WRAPPER}} ' => '--ui-e-content-space: {{SIZE}}em;',
652 - ],
653 - ]
654 - );
655 - $this->add_group_control(
656 - Group_Control_Background::get_type(),
657 - [
658 - 'name' => 'content_bg',
659 - 'selector' => '{{WRAPPER}} .ui-e-post-content',
660 - ]
661 - );
826 + ],
827 + 'default' => [
828 + 'unit' => 'em',
829 + 'size' => 0,
830 + ],
831 + 'selectors' => [
832 + '{{WRAPPER}} ' => '--ui-e-content-space: {{SIZE}}em;',
833 + ],
834 + 'condition' => array(
835 + 'box_style!' => 'overlay',
836 + ),
837 + ]
838 + );
662 839
663 - if($section){
840 + if ($section) {
664 841 $this->end_controls_section();
665 842 }
666 843 }
667 844 function TRAIT_register_post_button_style_controls($section = true)
668 845 {
669 - if($section){
846 + if ($section) {
670 847 $this->start_controls_section(
671 848 'section_button_style',
672 849 [
673 850 'label' => esc_html__('Button Style', 'uicore-elements'),
@@ -677,57 +854,57 @@
677 854 ),
678 855 ]
679 856 );
680 857 }
681 - $this->add_responsive_control(
682 - 'button_align',
683 - [
684 - 'label' => esc_html__( 'Alignment', 'elementor' ),
685 - 'type' => Controls_Manager::CHOOSE,
686 - 'options' => [
687 - 'start' => [
688 - 'title' => esc_html__( 'Left', 'elementor' ),
689 - 'icon' => 'eicon-text-align-left',
690 - ],
691 - 'center' => [
692 - 'title' => esc_html__( 'Center', 'elementor' ),
693 - 'icon' => 'eicon-text-align-center',
694 - ],
695 - 'end' => [
696 - 'title' => esc_html__( 'Right', 'elementor' ),
697 - 'icon' => 'eicon-text-align-right',
698 - ],
699 - 'normal' => [
700 - 'title' => esc_html__( 'Justified', 'elementor' ),
701 - 'icon' => 'eicon-text-align-justify',
702 - ],
858 + $this->add_responsive_control(
859 + 'button_align',
860 + [
861 + 'label' => esc_html__('Alignment', 'uicore-elements'),
862 + 'type' => Controls_Manager::CHOOSE,
863 + 'options' => [
864 + 'start' => [
865 + 'title' => esc_html__('Left', 'uicore-elements'),
866 + 'icon' => 'eicon-text-align-left',
703 867 ],
704 - 'default' => 'start',
705 - 'selectors' => [
706 - '{{WRAPPER}} .ui-e-readmore' => 'align-self: {{VALUE}};',
868 + 'center' => [
869 + 'title' => esc_html__('Center', 'uicore-elements'),
870 + 'icon' => 'eicon-text-align-center',
707 871 ],
872 + 'end' => [
873 + 'title' => esc_html__('Right', 'uicore-elements'),
874 + 'icon' => 'eicon-text-align-right',
875 + ],
876 + 'normal' => [
877 + 'title' => esc_html__('Justified', 'uicore-elements'),
878 + 'icon' => 'eicon-text-align-justify',
879 + ],
880 + ],
881 + 'default' => 'start',
882 + 'selectors' => [
883 + '{{WRAPPER}} .ui-e-readmore' => 'align-self: {{VALUE}};',
884 + ],
708 885
886 + ]
887 + );
888 + $this->register_button_style_controls(
889 + [
890 + 'section_condition' => [
891 + 'show_button' => 'yes'
709 892 ]
710 - );
711 - $this->register_button_style_controls(
712 - [
713 - 'section_condition' => [
714 - 'show_button' => 'yes'
715 - ]
716 - ]
717 - );
718 - // Remove button alignment from Elementor button traits because (seens to be a bug), updating Selector CSS with update_control(), don't work as expected with responsiveness
719 - $this->remove_responsive_control('align');
893 + ]
894 + );
895 + // Remove button alignment from Elementor button traits because (seens to be a bug), updating Selector CSS with update_control(), don't work as expected with responsiveness
896 + $this->remove_responsive_control('align');
720 897
721 - $this->TRAIT_register_post_specific_controls('button_gap');
898 + $this->TRAIT_register_post_specific_controls('button_gap');
722 899
723 - if($section) {
900 + if ($section) {
724 901 $this->end_controls_section();
725 902 }
726 903 }
727 904 function TRAIT_register_post_meta_style_controls($section = true)
728 905 {
729 - if($section) {
906 + if ($section) {
730 907 $this->start_controls_section(
731 908 'section_style_extra_content',
732 909 [
733 910 'label' => __('Meta Style', 'uicore-elements'),
@@ -734,47 +911,47 @@
734 911 'tab' => Controls_Manager::TAB_STYLE,
735 912 ]
736 913 );
737 914 }
738 - $this->start_controls_tabs('style_extra_tabs');
739 - $this->start_controls_tab(
740 - 'style_top_tab',
741 - [
742 - 'label' => esc_html__('Top', 'uicore-elements'),
743 - ]
744 - );
745 - $this->get_meta_style_controls('top');
746 - $this->end_controls_tab();
915 + $this->start_controls_tabs('style_extra_tabs');
916 + $this->start_controls_tab(
917 + 'style_top_tab',
918 + [
919 + 'label' => esc_html__('Top', 'uicore-elements'),
920 + ]
921 + );
922 + $this->get_meta_style_controls('top');
923 + $this->end_controls_tab();
747 924
748 - $this->start_controls_tab(
749 - 'style_before_title_tab',
750 - [
751 - 'label' => esc_html__('Before Title', 'uicore-elements'),
752 - ]
753 - );
754 - $this->get_meta_style_controls('before_title');
755 - $this->end_controls_tab();
925 + $this->start_controls_tab(
926 + 'style_before_title_tab',
927 + [
928 + 'label' => esc_html__('Before Title', 'uicore-elements'),
929 + ]
930 + );
931 + $this->get_meta_style_controls('before_title');
932 + $this->end_controls_tab();
756 933
757 - $this->start_controls_tab(
758 - 'style_after_title_tab',
759 - [
760 - 'label' => esc_html__('After Title', 'uicore-elements'),
761 - ]
762 - );
763 - $this->get_meta_style_controls('after_title');
764 - $this->end_controls_tab();
934 + $this->start_controls_tab(
935 + 'style_after_title_tab',
936 + [
937 + 'label' => esc_html__('After Title', 'uicore-elements'),
938 + ]
939 + );
940 + $this->get_meta_style_controls('after_title');
941 + $this->end_controls_tab();
765 942
766 - $this->start_controls_tab(
767 - 'style_bottom_tab',
768 - [
769 - 'label' => esc_html__('Bottom', 'uicore-elements'),
770 - ]
771 - );
772 - $this->get_meta_style_controls('bottom');
773 - $this->end_controls_tab();
774 - $this->end_controls_tabs();
943 + $this->start_controls_tab(
944 + 'style_bottom_tab',
945 + [
946 + 'label' => esc_html__('Bottom', 'uicore-elements'),
947 + ]
948 + );
949 + $this->get_meta_style_controls('bottom');
950 + $this->end_controls_tab();
951 + $this->end_controls_tabs();
775 952
776 - if($section) {
953 + if ($section) {
777 954 $this->end_controls_section();
778 955 }
779 956 }
780 957 function TRAIT_register_post_animation_controls()
@@ -828,8 +1005,9 @@
828 1005 'default' => '',
829 1006 'options' => [
830 1007 '' => __('None', 'uicore-elements'),
831 1008 'ui-e-title-anim-underline' => __('Underline', 'uicore-elements'),
1009 + 'ui-e-title-anim-show' => __('Show', 'uicore-elements'),
832 1010 ],
833 1011 'prefix_class' => '',
834 1012 ]
835 1013 );
@@ -911,16 +1089,20 @@
911 1089 * @param array $settings Elementor controls settings.
912 1090 * @param object $default_query The default query object. Used to tell if is a frontend or rest api request.
913 1091 *
914 1092 * @return void Don't return anything, but sets the query object to $_query variable that can be accessed by the widget.
915 - */
1093 + */
916 1094 function TRAIT_query_posts($settings, $default_query)
917 1095 {
918 1096 $post_type = $settings['posts-filter_post_type'];
919 1097
920 - if ( $post_type === 'related' ) {
921 - $this->_query = Helper::get_related('random', $settings['item_limit']['size']);
922 -
1098 + if ($post_type === 'related') {
1099 + $current_post_id = $settings['__current_post_id'] ?? [];
1100 + $this->_query = Helper::get_related_ajax(
1101 + Query::get_queried_page($settings),
1102 + $settings['item_limit']['size'],
1103 + $current_post_id
1104 + );
923 1105 } else {
924 1106 $query_args = Query::get_query_args('posts-filter', $settings);
925 1107
926 1108 if ($post_type === 'current') {
@@ -925,16 +1107,16 @@
925 1107
926 1108 if ($post_type === 'current') {
927 1109
928 1110 // Makes sure widget will render some posts at editor screen
929 - if( $this->is_edit_mode() ){
1111 + if ($this->is_edit_mode()) {
930 1112 $query_args['post_type'] = 'post';
931 -
932 1113 } else {
933 1114 $query_args = $default_query;
934 1115
1116 + /// TODO: very likely commit `38c618c` on Elements repo make this fallback useless. Test it
935 1117 // Post type fallback for APG
936 - if( isset($default_query['post_type']) || isset($default_query['query']['post_type']) ){
1118 + if (isset($default_query['post_type']) || isset($default_query['query']['post_type'])) {
937 1119 $post_type = $default_query['post_type'] ?? $default_query['query']['post_type'];
938 1120 } else {
939 1121 $post_type = 'post';
940 1122 }
@@ -941,12 +1123,20 @@
941 1123
942 1124 // Set pagination
943 1125 $query_args['paged'] = Query::get_queried_page($settings);
944 1126
1127 +
1128 + // current bug: clicking `all` on `portfolio` archive post type brings `post` type posts
1129 +
945 1130 // Set tax filters for filter component, if enabled
946 - $queried_filters = Query::get_queried_filters($settings, get_post_type(), 'posts-filter');
947 - $query_args['tax_query'] = empty($queried_filters['tax_query']) ? [] : $queried_filters['tax_query'];
1131 + $queried_filters = Query::get_queried_filters($settings, $post_type, 'posts-filter');
1132 + $query_args['tax_query'] = empty($queried_filters['tax_query'])
1133 + ? []
1134 + : $queried_filters['tax_query'];
948 1135 }
1136 +
1137 + // Set products per page
1138 + $query_args['posts_per_page'] = Helper::get_framework_visible_posts($post_type);
949 1139 }
950 1140
951 1141 if ($post_type === 'portfolio') {
952 1142 $query_args['orderby'] = 'menu_order date';
@@ -955,54 +1145,12 @@
955 1145 $this->_query = new \WP_Query($query_args);
956 1146 }
957 1147 }
958 1148
959 - /**
960 - * Match each meta icon size (if SVG) with the correspondent font size set by the user.
961 - *
962 - * @param array $settings Elementor controls settings.
963 - *
964 - * @return void
965 - */
966 - function TRAIT_set_meta_font_size_to_svg($settings)
967 - {
968 - // Required specifically for SVG icons
969 - if( \Elementor\Plugin::$instance->experiments->is_feature_active('e_font_icon_svg') == false ){
970 - return;
971 - }
972 -
973 - // Get all available metas
974 - $metas = ['top_meta', 'before_title_meta', 'after_title_meta', 'bottom_meta'];
975 - $metas_css = '';
976 - $default_size = '16px';
977 -
978 - // Creates a variable for each meta font-size and set a font-size, falling back to default size as last resource.
979 - foreach ($metas as $meta) {
980 -
981 - // Check if current meta has a font-size set.
982 - ${$meta . '_size'} = isset( $settings[$meta . '_typography_font_size'] ) ? $settings[$meta . '_typography_font_size'] : $default_size;
983 -
984 - // Check if the font-size value is not empty (user might customize other infos but not the font-size)
985 - ${$meta . '_size'} = !empty( ${$meta .'_size'}['size'] )
986 - ? ${$meta .'_size'}['size'] . ${$meta .'_size'}['unit']
987 - : $default_size;
988 -
989 - // Creates the css variable
990 - $metas_css .= '--' . $meta . '-font-size: ' . esc_html(${$meta . '_size'}) . ';';
991 - }
992 -
993 - // print it on the main widget wrapper
994 - $this->add_render_attribute(
995 - '_wrapper',
996 - 'style',
997 - $metas_css
998 - );
999 - }
1000 -
1001 - // Render functions
1149 + // Render functions
1002 1150 function get_post_image()
1003 1151 {
1004 - if ($this->get_settings_for_display('image') !== 'yes') {
1152 + if ($this->is_option('image', 'yes', '!==')) {
1005 1153 return;
1006 1154 }
1007 1155
1008 1156 $pic_id = get_post_thumbnail_id();
@@ -1008,34 +1156,36 @@
1008 1156 $pic_id = get_post_thumbnail_id();
1009 1157 if (!$pic_id)
1010 1158 return;
1011 1159 $size = $this->get_settings_for_display('image_size_select') ?? 'uicore-medium';
1012 - ?>
1013 - <a class="ui-e-post-img-wrapp"
1014 - href="<?php echo esc_url(get_permalink()); ?>"
1015 - title="<?php echo esc_attr__('View Post:', 'uicore-elements') . the_title_attribute(['echo' => false]); ?>">
1160 +?>
1161 + <a class="ui-e-post-img-wrapp"
1162 + href="<?php echo esc_url(get_permalink()); ?>"
1163 + title="<?php echo esc_attr__('View Post:', 'uicore-elements') . the_title_attribute(['echo' => false]); ?>">
1016 1164
1017 - <?php if ($this->get_settings_for_display('masonry') === 'ui-e-maso') { ?>
1018 - <?php the_post_thumbnail($size, ['class' => 'ui-e-post-img']); ?>
1019 - <?php } else { ?>
1020 - <div class="ui-e-post-img" style="background-image:url(<?php echo wp_get_attachment_image_url($pic_id, $size) ?>)"></div>
1021 - <?php } ?>
1022 - </a>
1023 - <?php
1165 + <?php if ($this->get_settings_for_display('masonry') === 'ui-e-maso') { ?>
1166 + <?php the_post_thumbnail($size, ['class' => 'ui-e-post-img']); ?>
1167 + <?php } else { ?>
1168 + <div class="ui-e-post-img" style="background-image:url(<?php echo esc_url(wp_get_attachment_image_url($pic_id, $size)); ?>)"></div>
1169 + <?php } ?>
1170 + </a>
1171 + <?php
1024 1172
1025 1173 }
1026 - function get_post_title()
1174 + function get_post_title(string $tag)
1027 1175 {
1028 - if ($this->get_settings_for_display('title') !== 'yes') {
1176 + if ($this->is_option('title', 'yes', '!==')) {
1029 1177 return;
1030 1178 }
1031 - ?>
1032 - <a href="<?php echo esc_url( get_permalink() );?>" title="<?php echo esc_attr__('View Post:','uicore-elements') . esc_html(the_title_attribute(['echo'=>false])); ?>">
1033 - <h4 class="ui-e-post-title"><span><?php echo esc_html(get_the_title()); ?></span></h4>
1034 - </a>
1035 - <?php
1179 + ?>
1180 + <a href="<?php echo esc_url(get_permalink()); ?>" title="<?php echo esc_attr__('View Post:', 'uicore-elements') . esc_html(the_title_attribute(['echo' => false])); ?>">
1181 + <<?php echo Helper::esc_tag($tag); ?> class="ui-e-post-title">
1182 + <span> <?php echo esc_html(get_the_title()); ?> </span>
1183 + </<?php echo Helper::esc_tag($tag); ?>>
1184 + </a>
1185 + <?php
1036 1186 }
1037 - function get_post_meta($position)
1187 + function get_post_meta($position, $product_id = null)
1038 1188 {
1039 1189 $meta_list = $this->get_settings_for_display($position . '_meta');
1040 1190 if (!isset($meta_list[0]) || $meta_list[0]['type'] == '') {
1041 1191 return;
@@ -1041,18 +1191,18 @@
1041 1191 return;
1042 1192 }
1043 1193 echo ($position == 'top') ? '<div class="ui-e-post-top-meta">' : '';
1044 1194 echo ($position == 'after_title') ? '<div class="ui-e-meta-wrapp">' : '';
1045 - echo '<div class="ui-e-post-meta ui-e-'.esc_attr($position).'">';
1046 - foreach ($meta_list as $meta) {
1047 - if($meta['type'] != 'none'){
1048 - $this->display_meta($meta);
1195 + echo '<div class="ui-e-post-meta ui-e-' . esc_attr($position) . '">';
1196 + foreach ($meta_list as $meta) {
1197 + if ($meta['type'] != 'none') {
1198 + $this->display_meta($meta, $product_id);
1049 1199
1050 - if( next( $meta_list ) && $this->get_settings_for_display( $position.'_meta_separator' ) ) {
1051 - echo '<span class="ui-e-separator">'.esc_html($this->get_settings_for_display( $position.'_meta_separator' )).'</span>';
1052 - }
1200 + if (next($meta_list) && $this->get_settings_for_display($position . '_meta_separator')) {
1201 + echo '<span class="ui-e-separator">' . esc_html($this->get_settings_for_display($position . '_meta_separator')) . '</span>';
1053 1202 }
1054 1203 }
1204 + }
1055 1205 echo '</div>';
1056 1206 echo ($position == 'top' || $position == 'after_title') ? '</div>' : '';
1057 1207 }
1058 1208 /**
@@ -1057,62 +1207,62 @@
1057 1207 }
1058 1208 /**
1059 1209 * Render the post read more button.
1060 1210 *
1061 - * @param bool $is_product. If true, will render an add to cart button.
1211 + * @param int $index The loop index.
1062 1212 *
1063 1213 * @return void
1064 1214 */
1065 - function TRAIT_get_button($is_product = false)
1215 + function TRAIT_get_button($index)
1066 1216 {
1067 - $settings = $this->get_settings_for_display();
1217 + $settings = $this->get_settings_for_display();
1068 1218
1069 - if( $is_product ){
1070 - global $product;
1219 + // Render att slugs
1220 + $button_slug = 'button_' . $index;
1221 + $content_slug = 'content-wrapper_' . $index;
1222 + $icon_slug = 'icon-align_' . $index;
1223 + $text_slug = 'text_' . $index;
1071 1224
1072 - // Get default add to cart text as fallback
1073 - $settings['text'] = empty($settings['text']) ? $product->add_to_cart_text() : $settings['text'];
1074 - }
1075 -
1076 - $this->add_render_attribute('button', [
1225 + $this->add_render_attribute($button_slug, [
1077 1226 'class' => ['elementor-button-link', 'elementor-button', 'ui-e-readmore'],
1078 1227 'role' => 'button',
1079 1228 ]);
1080 - $this->add_render_attribute('content-wrapper', 'class', 'elementor-button-content-wrapper');
1081 1229
1230 + $this->add_render_attribute($content_slug, 'class', 'elementor-button-content-wrapper');
1231 +
1082 1232 if (!empty($settings['button_css_id'])) {
1083 - $this->add_render_attribute('button', 'id', $settings['button_css_id']);
1233 + $this->add_render_attribute($button_slug, 'id', $settings['button_css_id']);
1084 1234 }
1085 1235
1086 1236 if (!empty($settings['size'])) {
1087 - $this->add_render_attribute('button', 'class', 'elementor-size-' . $settings['size']);
1237 + $this->add_render_attribute($button_slug, 'class', 'elementor-size-' . $settings['size']);
1088 1238 }
1089 1239
1090 1240 if (!empty($settings['hover_animation'])) {
1091 - $this->add_render_attribute('button', 'class', 'elementor-animation-' . $settings['hover_animation']);
1241 + $this->add_render_attribute($button_slug, 'class', 'elementor-animation-' . $settings['hover_animation']);
1092 1242 }
1093 1243
1094 1244 $btn_classes = isset($settings['icon_align'])
1095 - ? ['elementor-button-icon', 'elementor-align-icon-' . $settings['icon_align'] ]
1096 - : 'elementor-button-icon';
1245 + ? ['elementor-button-icon', 'elementor-align-icon-' . $settings['icon_align']]
1246 + : 'elementor-button-icon';
1097 1247
1098 1248 $this->add_render_attribute([
1099 - 'icon-align' => [
1249 + $icon_slug => [
1100 1250 'class' => $btn_classes
1101 1251 ],
1102 - 'text' => [
1252 + $text_slug => [
1103 1253 'class' => 'elementor-button-text',
1104 1254 ],
1105 1255 ]);
1106 1256
1107 - if( isset($settings['icon_align']) ){
1108 - $this->add_render_attribute('content-wrapper', 'class', 'elementor-button-content');
1257 + if (isset($settings['icon_align'])) {
1258 + $this->add_render_attribute($content_slug, 'class', 'elementor-button-content');
1109 1259 }
1110 1260
1111 - $tbn_content = '<span ' . $this->get_render_attribute_string('content-wrapper') . '>';
1261 + $tbn_content = '<span ' . $this->get_render_attribute_string($content_slug) . '>';
1112 1262
1113 1263 if (!empty($settings['icon']) || !empty($settings['selected_icon']['value'])) {
1114 - $tbn_content .= '<span ' . $this->get_render_attribute_string('icon-align') . '>';
1264 + $tbn_content .= '<span ' . $this->get_render_attribute_string($icon_slug) . '>';
1115 1265 \ob_start();
1116 1266 Icons_Manager::render_icon($settings['selected_icon'], ['aria-hidden' => 'true']);
1117 1267 $tbn_content .= \ob_get_clean();
1118 1268 $tbn_content .= '</span>';
@@ -1117,64 +1267,49 @@
1117 1267 $tbn_content .= \ob_get_clean();
1118 1268 $tbn_content .= '</span>';
1119 1269 }
1120 1270
1121 - $tbn_content .= '<span ' . $this->get_render_attribute_string('text') . '>';
1271 + $tbn_content .= '<span ' . $this->get_render_attribute_string($text_slug) . '>';
1122 1272 $tbn_content .= $settings['text'];
1123 1273 $tbn_content .= '</span> </span>';
1124 1274
1125 - // WooCommerce add to cart button
1126 - if ($is_product) {
1127 - if ($product) {
1128 - echo Helper::esc_svg(apply_filters(
1129 - 'woocommerce_loop_add_to_cart_link', // WPCS: XSS ok.
1130 - sprintf(
1131 - '<a href="%s" data-quantity="%s" %s>%s</a>',
1132 - esc_url($product->add_to_cart_url()),
1133 - esc_attr(1),
1134 - $this->get_render_attribute_string('button'),
1135 - $tbn_content
1136 - ),
1137 - $product
1138 - ));
1139 - }
1140 -
1141 - // Default button
1142 - } else {
1275 + ?>
1276 + <a href="<?php echo esc_url(get_permalink()); ?>" <?php $this->print_render_attribute_string($button_slug); ?>>
1277 + <?php
1278 + //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1279 + echo Helper::esc_svg($tbn_content);
1143 1280 ?>
1144 - <a href="<?php echo esc_url(get_permalink()); ?>" <?php $this->print_render_attribute_string('button'); ?>>
1145 - <?php echo Helper::esc_svg( $tbn_content ); ?>
1146 - </a>
1147 - <?php
1148 - }
1281 + </a>
1282 + <?php
1149 1283 }
1284 +
1150 1285 /**
1151 1286 * Renders a post item with various settings and options.
1152 1287 * Important: any changes here should also be considered to `TRAIT_render_product()` from Product Component.
1153 1288 *
1289 + * @param int $index The loop index.
1154 1290 * @param bool $carousel Indicates if the item needs carousel classnames.
1155 1291 * @param bool $legacy Indicates if the item is using legacy classnames.
1156 1292 *
1157 1293 * @return void
1158 1294 */
1159 - function TRAIT_render_item($carousel = false, $legacy = false)
1295 + function TRAIT_render_item($index, $carousel = false, $legacy = false)
1160 1296 {
1161 1297 $settings = $this->get_settings_for_display();
1162 1298 $excerpt_length = $settings['excerpt_trim'];
1163 1299
1164 1300 // Classnames but checking if we the widget is APG (legacy version)
1165 - $item_classes = $legacy ? ['ui-e-post-item', 'ui-e-item'] : ['ui-e-item'] ; // Single item lower wrap class receptor
1301 + $item_classes = $legacy ? ['ui-e-post-item', 'ui-e-item'] : ['ui-e-item']; // Single item lower wrap class receptor
1166 1302 $hover_item_class = $legacy ? 'anim_item' : 'item_hover_animation'; // item hover animation class
1167 1303
1168 1304 // If widget is not carousel type, we set animations classes directly on item selector
1169 - if(!$carousel) {
1305 + if (!$carousel) {
1170 1306 $item_classes[] = 'ui-e-animations-wrp';
1171 1307 $item_classes[] = $settings['animate_items'] === 'ui-e-grid-animate' ? 'elementor-invisible' : '';
1172 1308 $item_classes[] = $settings[$hover_item_class] !== '' ? $settings[$hover_item_class] : '';
1173 -
1174 1309 } else {
1175 1310 // Get entrance and item hover animation classes
1176 - $entrance = (isset($settings['animate_items']) && $settings['animate_items'] == 'ui-e-grid-animate') ? 'elementor-invisible' : '';
1311 + $entrance = $this->is_option('animate_items', 'ui-e-grid-animate') ? 'elementor-invisible' : '';
1177 1312 $hover = isset($settings[$hover_item_class]) ? $settings[$hover_item_class] : '';
1178 1313 $animations = sprintf('%s %s', $entrance, $hover);
1179 1314
1180 1315 // Check if entrance or hover animation are set
@@ -1180,59 +1315,68 @@
1180 1315 // Check if entrance or hover animation are set
1181 1316 $has_animation = !empty($entrance) || !empty($hover)
1182 1317
1183 1318 // Prints extra wrappers required by the carousel script
1184 - ?>
1319 + ?>
1185 1320 <div class="ui-e-wrp swiper-slide">
1186 - <?php if($has_animation) : ?>
1187 - <div class="ui-e-animations-wrp <?php echo esc_attr($animations);?>">
1188 - <?php endif; ?>
1321 + <?php if ($has_animation) : ?>
1322 + <div class="ui-e-animations-wrp <?php echo esc_attr($animations); ?>">
1323 + <?php endif; ?>
1189 1324
1190 - <?php } ?>
1325 + <?php } ?>
1191 1326
1192 - <div class="<?php echo esc_attr( implode(' ', $item_classes));?>">
1193 - <article <?php post_class(); ?>>
1194 - <div class="ui-e-post-top">
1195 - <?php $this->get_post_image(); ?>
1196 - <?php $this->get_post_meta('top'); ?>
1197 - </div>
1198 - <div class="ui-e-post-content">
1199 - <?php $this->get_post_meta('before_title'); ?>
1200 - <?php
1201 - if ($this->get_settings_for_display('title') === 'yes')
1202 - $this->get_post_title();
1203 - ?>
1204 - <?php $this->get_post_meta('after_title'); ?>
1205 - <?php
1206 - if ($this->get_settings_for_display('excerpt'))
1207 - echo wp_kses_post('<div class="ui-e-post-text">' . wp_trim_words(get_the_excerpt(), $excerpt_length) . '</div>');
1208 - ?>
1209 - <?php $this->get_post_meta('bottom'); // button
1210 - ?>
1211 - <?php
1212 - if ( $this->get_settings_for_display('show_button') === 'yes' ) {
1213 - // Add match height spacing element if carousel. May look intrusive, but is the simplest method compared
1214 - // to absolute positioning or catching last content element to apply margin.
1215 - if($carousel && $settings['match_height'] === 'yes'){
1216 - ?>
1327 + <div class="<?php echo esc_attr(implode(' ', $item_classes)); ?>">
1328 + <article <?php post_class(); ?>>
1329 + <div class="ui-e-post-top">
1330 + <?php $this->get_post_image(); ?>
1331 + <?php $this->get_post_meta('top'); ?>
1332 + </div>
1333 +
1334 + <?php if ($this->is_option('global_link', 'yes')) : ?>
1335 + <a href="<?php echo esc_url(get_permalink()); ?>"
1336 + class="ui-e-global-link"
1337 + aria-label="<?php echo esc_attr__('View Post:', 'uicore-elements') . esc_html(the_title_attribute(['echo' => false])); ?>"
1338 + title="<?php echo esc_attr__('View Post:', 'uicore-elements') . esc_html(the_title_attribute(['echo' => false])); ?>"> </a>
1339 + <?php endif; ?>
1340 +
1341 + <div class="ui-e-post-content">
1342 +
1343 + <?php $this->get_post_meta('before_title'); ?>
1344 + <?php
1345 + if ($this->is_option('title', 'yes'))
1346 + $this->get_post_title($settings['title_tag']);
1347 + ?>
1348 + <?php $this->get_post_meta('after_title'); ?>
1349 + <?php
1350 + if ($this->get_settings_for_display('excerpt'))
1351 + echo wp_kses_post('<div class="ui-e-post-text">' . wp_trim_words(get_the_excerpt(), $excerpt_length) . '</div>');
1352 + ?>
1353 + <?php $this->get_post_meta('bottom'); // button
1354 + ?>
1355 + <?php
1356 + if ($this->is_option('show_button', 'yes')) {
1357 + // Add match height spacing element if carousel. May look intrusive, but is the simplest method compared
1358 + // to absolute positioning or catching last content element to apply margin.
1359 + if ($carousel && $this->is_option('match_height', 'yes')) {
1360 + ?>
1217 1361 <span class="ui-e-match-height"></span>
1218 - <?php
1362 + <?php
1363 + }
1364 +
1365 + if (!isset($settings['button_position']) || empty($settings['button_position'])) {
1366 + $this->TRAIT_get_button($index);
1367 + }
1219 1368 }
1369 + ?>
1370 + </div>
1371 + </article>
1372 + </div>
1220 1373
1221 - if( !isset($settings['button_position']) || empty($settings['button_position']) ) {
1222 - $this->TRAIT_get_button();
1223 - }
1224 - }
1225 - ?>
1374 + <?php if ($carousel) { ?>
1226 1375 </div>
1227 - </article>
1376 + <?php if ($has_animation) : ?>
1228 1377 </div>
1378 + <?php endif; ?>
1229 1379
1230 - <?php if($carousel) { ?>
1231 - </div>
1232 - <?php if($has_animation) : ?>
1233 - </div>
1234 - <?php endif; ?>
1235 -
1236 - <?php }
1237 - }
1238 -}
1380 +<?php }
1381 + }
1382 + }