PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.0.8
UiCore Elements – Free widgets and templates for Elementor v1.0.8
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
uicore-elements / includes / widgets / post-grid.php

post-grid.php in UiCore Elements – Free widgets and templates for Elementor 1.0.8, at includes/widgets/post-grid.php

493 lines 13.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace UiCoreElements;
3
4 use Elementor\Controls_Manager;
5 use Elementor\Group_Control_Border;
6 use Elementor\Group_Control_Box_Shadow;
7 use Elementor\Group_Control_Typography;
8 use Elementor\Group_Control_Background;
9 use UiCoreElements\UiCoreWidget;
10
11 use UiCore\Assets;
12 use UiCore\Portfolio;
13 use UiCore\Blog;
14 use UiCore\Helper;
15 use UiCoreElements\Controls\Post_Filter;
16 use UiCoreElements\Controls\Query;
17
18 defined('ABSPATH') || exit();
19
20 /**
21 * Scripts and Styles Class
22 */
23 class PostGrid extends UiCoreWidget
24 {
25 private $_query;
26
27 public function __construct($data = [], $args = null)
28 {
29 parent::__construct($data, $args);
30 }
31 public function get_name()
32 {
33 return 'uicore-post-grid';
34 }
35 public function get_categories()
36 {
37 return ['uicore'];
38 }
39 public function get_title()
40 {
41 return __('Post Grid', 'uicore-elements');
42 }
43 public function get_icon()
44 {
45 return 'eicon-gallery-grid ui-e-widget';
46 }
47 public function get_keywords()
48 {
49 return ['post', 'grid', 'blog', 'recent', 'news'];
50 }
51 public function get_styles()
52 {
53 return [];
54 }
55 public function get_scripts()
56 {
57 return [];
58 }
59
60 public function on_import($element)
61 {
62 if (!get_post_type_object($element['settings']['posts-filter_post_type'])) {
63 $element['settings']['posts-filter_post_type'] = 'post';
64 }
65
66 return $element;
67 }
68 public function on_export($element)
69 {
70 $element = Post_Filter::on_export_remove_setting_from_element($element, 'uicore-posts-filter');
71 return $element;
72 }
73
74 public function get_query()
75 {
76 return $this->_query;
77 }
78
79 protected function register_controls()
80 {
81
82 $default_columns = Helper::get_option('blog_col', 3);
83
84 $this->start_controls_section('section_post_grid_def', [
85 'label' => esc_html__('Query', 'uicore-elements'),
86 ]);
87
88 $this->add_group_control(Post_Filter::get_type(), [
89 'name' => 'posts-filter',
90 'label' => esc_html__('Posts', 'uicore-elements'),
91 ]);
92
93 $this->add_control('item_limit', [
94 'label' => esc_html__('Item Limit', 'uicore-elements'),
95 'type' => Controls_Manager::SLIDER,
96 'reder_type' => 'template',
97 'range' => [
98 'px' => [
99 'min' => 1,
100 'max' => 30,
101 ],
102 ],
103 'default' => [
104 'size' => 3,
105 ],
106 ]);
107 $this->add_control('col_number', [
108 'label' => esc_html__('Columns Number', 'uicore-elements'),
109 'type' => Controls_Manager::SLIDER,
110 'reder_type' => 'template',
111 'range' => [
112 'px' => [
113 'min' => 1,
114 'max' => 4,
115 ],
116 ],
117 'default' => [
118 'size' => $default_columns,
119 ],
120 ]);
121
122 $this->end_controls_section();
123
124 $this->start_controls_section('section_post_grid_layout', [
125 'label' => esc_html__('Layout', 'uicore-elements'),
126 ]);
127 $this->add_control(
128 'layout',
129 [
130 'label' => __( 'Item Style', 'uicore-elements' ),
131 'type' => Controls_Manager::SELECT,
132 'default' => 'default',
133 'options' => [
134 'default' => __( 'Default', 'uicore-elements' ),
135 'classic' => __( 'classic', 'uicore-elements' ),
136 'grid' => __( 'Grid', 'uicore-elements' ),
137 'horizontal' => __( 'Horizontal', 'uicore-elements' ),
138 'masonry' => __( 'Masonry', 'uicore-elements' ),
139 ],
140 'condition' => array(
141 'posts-filter_post_type!' => 'portfolio',
142 ),
143 ]
144 );
145
146 $this->add_control(
147 'box_style',
148 [
149 'label' => __( 'layout', 'uicore-elements' ),
150 'type' => Controls_Manager::SELECT,
151 'default' => 'default',
152 'options' => [
153 'default' => __( 'Default', 'uicore-elements' ),
154 'boxed' => __( 'Boxed', 'uicore-elements' ),
155 'boxed-creative' => __( 'Boxed Creative', 'uicore-elements' ),
156 'cover' => __( 'Cover', 'uicore-elements' ),
157 ],
158 'condition' => array(
159 'posts-filter_post_type!' => 'portfolio',
160 ),
161 ]
162 );
163
164 $this->add_control(
165 'box_ratio',
166 [
167 'label' => __( 'Image Ratio', 'uicore-elements' ),
168 'type' => Controls_Manager::SELECT,
169 'default' => 'default',
170 'options' => [
171 'default' => __( 'Default', 'uicore-elements' ),
172 'square' => __( 'Square', 'uicore-elements' ),
173 'landscape' => __( 'Landscape', 'uicore-elements' ),
174 'portrait' => __( 'Portrait', 'uicore-elements' ),
175 ],
176 'condition' => array(
177 'posts-filter_post_type!' => 'portfolio',
178 ),
179 ]
180 );
181 $this->add_control(
182 'extra_author',
183 [
184 'label' => __( 'Author', 'uicore-elements' ),
185 'type' => Controls_Manager::SWITCHER,
186 'return_value' => 'yes',
187 'default' => '',
188 'reder_type' => 'template',
189 'condition' => array(
190 'posts-filter_post_type!' => 'portfolio',
191 ),
192 ]
193 );
194 $this->add_control(
195 'extra_date',
196 [
197 'label' => __( 'Date', 'uicore-elements' ),
198 'type' => Controls_Manager::SWITCHER,
199 'return_value' => 'yes',
200 'default' => '',
201 'reder_type' => 'template',
202 'condition' => array(
203 'posts-filter_post_type!' => 'portfolio',
204 ),
205 ]
206 );
207 $this->add_control(
208 'extra_excerpt',
209 [
210 'label' => __( 'Excerpt', 'uicore-elements' ),
211 'type' => Controls_Manager::SWITCHER,
212 'return_value' => 'yes',
213 'default' => '',
214 'reder_type' => 'template',
215 'condition' => array(
216 'posts-filter_post_type!' => 'portfolio',
217 ),
218 ]
219 );
220 $this->add_control(
221 'extra_category',
222 [
223 'label' => __( 'Category', 'uicore-elements' ),
224 'type' => Controls_Manager::SWITCHER,
225 'return_value' => 'yes',
226 'default' => '',
227 'reder_type' => 'template',
228 'condition' => array(
229 'posts-filter_post_type!' => 'portfolio',
230 ),
231 ]
232 );
233
234 $this->end_controls_section();
235
236
237 $this->start_controls_section(
238 'section_style_typo',
239 [
240 'label' => __( 'Content Style', 'uicore-elements' ),
241 'tab' => Controls_Manager::TAB_STYLE,
242 ]
243 );
244
245 $this->add_control(
246 'post_heading_title',
247 [
248 'label' => esc_html__( 'Post Title', 'uicore-elements' ),
249 'type' => Controls_Manager::HEADING,
250 'separator' => 'before',
251 ]
252 );
253
254 $this->add_control(
255 'post_title_color',
256 [
257 'label' => esc_html__( 'Color', 'uicore-elements' ),
258 'type' => Controls_Manager::COLOR,
259 'default' => '',
260 'selectors' => [
261 '{{WRAPPER}} .uicore-post-title' => 'color: {{VALUE}};',
262 ],
263 ]
264 );
265
266 $this->add_group_control(
267 Group_Control_Typography::get_type(),
268 [
269 'name' => 'post_title_typography',
270 'selector' => '{{WRAPPER}} .uicore-post-title, {{WRAPPER}} .uicore-post-title',
271 ]
272 );
273
274
275 $this->add_control(
276 'extra_excerpt_heading',
277 [
278 'label' => esc_html__( 'Excerpt', 'uicore-elements' ),
279 'type' => Controls_Manager::HEADING,
280 'separator' => 'before',
281 ]
282 );
283 $this->add_responsive_control(
284 'extra_excerpt_bottom_space',
285 [
286 'label' => esc_html__( 'Spacing', 'uicore-elements' ),
287 'type' => Controls_Manager::SLIDER,
288 'range' => [
289 'px' => [
290 'min' => 0,
291 'max' => 100,
292 ],
293 ],
294 'selectors' => [
295 '{{WRAPPER}} .uicore-post-info-wrapper > p' => 'margin-top: {{SIZE}}{{UNIT}};',
296 ],
297 ]
298 );
299
300 $this->add_control(
301 'extra_excerpt_color',
302 [
303 'label' => esc_html__( 'Color', 'uicore-elements' ),
304 'type' => Controls_Manager::COLOR,
305 'default' => '',
306 'selectors' => [
307 '{{WRAPPER}} .uicore-post-info-wrapper > p' => 'color: {{VALUE}};',
308 ],
309 ]
310 );
311
312 $this->add_group_control(
313 Group_Control_Typography::get_type(),
314 [
315 'name' => 'extra_excerpt_typography',
316 'selector' => '{{WRAPPER}} .uicore-post-info-wrapper > p',
317 ]
318 );
319
320
321 $this->add_responsive_control(
322 'box_padding',
323 [
324 'label' => esc_html__( 'Content Padding', 'uicore-elements' ),
325 'type' => Controls_Manager::DIMENSIONS,
326 'size_units' => [ 'px', 'em', '%', 'rem' ],
327 'separator' => 'before',
328 'selectors' => [
329 '{{WRAPPER}} .uicore-blog-grid .uicore-post .uicore-post-info' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}!important;',
330 ],
331 ]
332 );
333
334 $this->add_group_control(
335 Group_Control_Background::get_type(),
336 [
337 'name' => 'box_background',
338 'selector' => '{{WRAPPER}} .uicore-blog-grid .uicore-post',
339 ]
340 );
341
342 $this->add_group_control(
343 Group_Control_Border::get_type(),
344 [
345 'name' => 'box_border',
346 'selector' => '{{WRAPPER}} .uicore-blog-grid .uicore-post',
347 'separator' => 'before',
348 ]
349 );
350
351 $this->add_control(
352 'box_border_radius',
353 [
354 'label' => esc_html__( 'Border Radius', 'uicore-elements' ),
355 'type' => Controls_Manager::SLIDER,
356 'range' => [
357 'px' => [
358 'min' => 0,
359 'max' => 100,
360 ],
361 ],
362 'selectors' => [
363 '{{WRAPPER}} .uicore-blog-grid .uicore-post' => '--uicore-blog--radius: {{SIZE}}{{UNIT}};',
364 ],
365 ]
366 );
367
368 $this->add_group_control(
369 Group_Control_Box_Shadow::get_type(),
370 [
371 'name' => 'box_shadow_style',
372 'selector' => '{{WRAPPER}} .uicore-blog-grid .uicore-post',
373 ]
374 );
375
376
377 $this->end_controls_section();
378 }
379
380 public function query_posts($posts_per_page, $type = null)
381 {
382 $query_args = Query::get_query_args('posts-filter', $this->get_settings());
383
384 if($type === 'portfolio') {
385 $query_args['orderby'] = 'menu_order date';
386 }
387
388 $query_args['posts_per_page'] = $posts_per_page;
389
390 $this->_query = new \WP_Query($query_args);
391 }
392
393 protected function render()
394 {
395 $settings = $this->get_settings();
396
397 $col = $settings['col_number']['size'];
398 $type = $settings['posts-filter_post_type'];
399
400 $blog_item_style = $settings['box_style'];
401
402 if($type != 'portfolio'){
403
404 $type = str_replace(' ', '-', $blog_item_style);
405 if( \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
406 $content = '';
407
408 $content .= \file_get_contents( Assets::get_global('uicore-blog.css') );
409 if($blog_item_style != 'default'){
410 $content .= \file_get_contents(UICORE_ELEMENTS_ASSETS . '/css/post-grid.css');
411 }
412
413 ?>
414 <style>
415 <?php echo esc_html(wp_strip_all_tags($content)); ?>
416 </style>
417 <?php
418 }
419 else{
420 if($blog_item_style != 'default'){
421 wp_enqueue_style('uicore_blog_grid_'.$type, UICORE_ELEMENTS_ASSETS . '/css/post-grid.css', UICORE_ELEMENTS_VERSION);
422 }
423 }
424
425 }
426
427 $this->query_posts($settings['item_limit']['size'], $type);
428 $wp_query = $this->get_query();
429
430 if (!$wp_query->found_posts) {
431 echo 'No Posts Found!';
432 return;
433 }
434
435
436 if ($type === 'portfolio') {
437
438 if( \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
439 $content = '';
440 $content .= \file_get_contents( Assets::get_global('uicore-portfolio.css') );
441 ?>
442 <style>
443 <?php echo wp_strip_all_tags($content); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
444 </style>
445 <?php
446 }
447 if(!class_exists('\UiCore\Portfolio\Frontend')){
448 require_once UICORE_INCLUDES . '/portfolio/class-template.php';
449 require_once UICORE_INCLUDES . '/portfolio/class-frontend.php';
450 }
451 Portfolio\Frontend::frontend_css(true);
452 $portfolio = new Portfolio\Template('display');
453 $portfolio->portfolio_layout($wp_query, null, $col);
454
455 } else {
456 $layout = $settings['layout'] === 'default' ? null : $settings['layout'];
457 $style = $blog_item_style === 'default' ? null : $blog_item_style;
458
459 if(isset($settings['box_ratio'])){
460 $ratio = $settings['box_ratio'] === 'default' ? null : $settings['box_ratio'];
461 }else{//Fallback for older versions
462 $ratio = null;
463 }
464 if(isset($settings['extra_author'])){
465 $extra = [
466 'author' => $settings['extra_author'] === 'yes' ? true : false,
467 'date' => $settings['extra_date'] === 'yes' ? true : false,
468 'excerpt' => $settings['extra_excerpt'] === 'yes' ? true : false,
469 'category' => $settings['extra_category'] === 'yes' ? true : false
470 ];
471 }else{ //Fallback for older versions
472 $extra = [
473 'author' => null,
474 'date' => null,
475 'excerpt' => null,
476 'category' => null
477 ];
478 }
479
480
481 if(!class_exists('\UiCore\Blog\Frontend')){
482 require_once UICORE_INCLUDES . '/blog/class-template.php';
483 require_once UICORE_INCLUDES . '/blog/class-frontend.php';
484 }
485 Blog\Frontend::frontend_css(true);
486 $blog = new Blog\Template('display');
487 $blog->blog_layout($wp_query, $layout, $col,null,$ratio,$extra, $style);
488 }
489
490 }
491 }
492 \Elementor\Plugin::instance()->widgets_manager->register(new PostGrid());
493