PluginProbe
Post Grid Gutenberg Blocks – PostX / 4.1.3
Post Grid Gutenberg Blocks – PostX v4.1.3
5.0.39 5.0.38 5.0.37 5.0.36 5.0.35 5.0.34 5.0.33 5.0.32 5.0.31 5.0.30 5.0.29 5.0.28 5.0.27 5.0.26 5.0.25 5.0.23 5.0.24 5.0.22 5.0.21 5.0.20 5.0.19 5.0.18 5.0.17 2.1.1 2.1.2 All 237 releases
ultimate-post / blocks / Post_Module_2.php

Post_Module_2.php in Post Grid Gutenberg Blocks – PostX 4.1.3, at blocks/Post_Module_2.php

414 lines 22.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace ULTP\blocks;
3
4 defined('ABSPATH') || exit;
5
6 class Post_Module_2{
7
8 public function __construct() {
9 add_action('init', array($this, 'register'));
10 }
11
12 public function get_attributes() {
13
14 return array(
15 'blockId' => '',
16 'previewImg' => '',
17 //--------------------------
18 // Layout
19 //--------------------------
20 'layout' => 'layout1',
21
22 //--------------------------
23 // Query Setting
24 //--------------------------
25 'queryQuick' => '',
26 'queryNumPosts' => (object)['lg'=>5],
27 'queryNumber' => 5,
28 'queryType' => 'post',
29 'queryTax' => 'category',
30 'queryTaxValue' => '[]',
31 'queryRelation' => 'OR',
32 'queryOrderBy' => 'date',
33 'metaKey' => 'custom_meta_key',
34 'queryOrder' => 'desc',
35 // Include Remove from Version 2.5.4
36 'queryInclude' => '',
37 'queryExclude' => '[]',
38 'queryAuthor' => '[]',
39 'queryOffset' => '0',
40 'queryExcludeTerm' => '[]',
41 'queryExcludeAuthor' => '[]',
42 'querySticky' => true,
43 'queryUnique' => '',
44 'queryPosts' => '[]',
45 'queryCustomPosts' => '[]',
46 //--------------------------
47 // General Setting
48 //--------------------------
49 'titleShow' => true,
50 'titleStyle' => 'none',
51 'headingShow' => true,
52 'excerptShow' => true,
53 'catShow' => true,
54 'metaShow' => true,
55 'showImage' => true,
56 'filterShow' => false,
57 'paginationShow' => false,
58 'readMore' => false,
59 'contentTag' => 'div',
60 'openInTab' => false,
61 'notFoundMessage' => 'No Post Found',
62
63 //--------------------------
64 // Heading Setting/Style
65 //--------------------------
66 'headingText' => 'Post Module #2',
67 'headingURL' => '',
68 'headingBtnText' => 'View More',
69 'headingStyle' => 'style9',
70 'headingTag' => 'h2',
71 'headingAlign' => 'left',
72 'subHeadingShow' => false,
73 'subHeadingText' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ut sem augue. Sed at felis ut enim dignissim sodales.',
74
75 //--------------------------
76 // Title Setting/Style
77 //--------------------------
78 'titleTag' => 'h3',
79 'titlePosition' => true,
80 'titleLength' => 0,
81
82 //--------------------------
83 // Content Setting/Style
84 //--------------------------
85
86 'varticalAlign' => 'middle',
87 'showSeoMeta' => false,
88 'showSmallExcerpt' => false,
89 'showFullExcerpt' => false,
90 'smallExcerptLimit' => 20,
91 'excerptLimit' => 20,
92 'excerptBigColor' => '#fff',
93
94 //--------------------------
95 // Category Setting/Style
96 //--------------------------
97 'maxTaxonomy'=> '30',
98 'taxonomy' => 'category',
99 'showSmallCat' => false,
100 'catStyle' => 'classic',
101 'catPosition' => 'aboveTitle',
102 'customCatColor' => false,
103 'seperatorLink' => admin_url( 'edit-tags.php?taxonomy=category' ),
104 'onlyCatColor' => false,
105
106 //--------------------------
107 // Meta Setting/Style
108 //--------------------------
109 'showSmallMeta' => true,
110 'metaPosition' => 'top',
111 'metaStyle' => 'icon',
112 'authorLink' => true,
113 'metaSeparator' => 'dot',
114 'metaList' => '["metaAuthor","metaDate","metaRead"]',
115 'metaMinText' => 'min read',
116 'metaAuthorPrefix' => 'By',
117 'metaDateFormat' => 'M j, Y',
118 'metaListSmall' => '["metaAuthor","metaDate"]',
119 'LargeMetaColor' => '#fff',
120
121 //--------------------------
122 // Inner Content Setting/Style
123 //--------------------------
124
125 //--------------------------
126 // Image Setting/Style
127 //--------------------------
128 'columnFlip' => false,
129 'imgCrop' => 'full',
130 'imgCropSmall' => (ultimate_post()->get_setting('disable_image_size') == 'yes' ? 'full' : 'ultp_layout_square'),
131 'imgAnimation' => 'opacity',
132 'imgOverlay' => false,
133 'imgOverlayType' => 'default',
134 'fallbackEnable' => true,
135 'fallbackImg' => '',
136 'imgSrcset' => false,
137 'imgLazy' => false,
138
139 //--------------------------
140 // Video Setting/Style
141 //--------------------------
142 'vidIconEnable' => true,
143 'popupAutoPlay' => true,
144 'iconSize' => (object)['lg'=>'40', 'sm'=> '30', 'xs'=> '30', 'unit' => 'px'],
145 // by default should be off
146 'enablePopup' => false,
147 'enablePopupTitle' => true,
148
149 //--------------------------
150 // Separator
151 //--------------------------
152 'separatorShow' => false,
153
154 //--------------------------
155 // Read more Setting/Style
156 //--------------------------
157 'showSmallBtn' => false,
158 'readMoreText' => '',
159 'readMoreIcon' => 'rightArrowLg',
160
161 //--------------------------
162 // Filter Setting/Style
163 //--------------------------
164 'filterBelowTitle' => false,
165 'filterType' => 'category',
166 'filterText' => 'all',
167 'filterValue' => '[]',
168 'filterMobile' => true,
169 'filterMobileText' => 'More',
170
171 //--------------------------
172 // Pagination Setting/Style
173 //--------------------------
174 'paginationType' => 'navigation',
175 'paginationNav' => 'textArrow',
176 'navPosition' => 'topRight',
177
178 //--------------------------
179 // Wrapper Style
180 //--------------------------
181 'advanceId' => '',
182 'advanceZindex' => '',
183 'hideExtraLarge' => false,
184 'hideTablet' => false,
185 'hideMobile' => false,
186 'advanceCss' => '',
187 'currentPostId' => '',
188
189 // --------------------------------
190 // Advance Filter Block Compatibility
191 // --------------------------------
192 'advFilterEnable' => false,
193 'querySearch' => '',
194
195 // --------------------------------
196 // Pagination block compatibility
197 // --------------------------------
198 'advPaginationEnable' => false,
199 'paginationAjax' => true,
200 'paginationText' => 'Previous|Next',
201 'loadMoreText' => 'Load More',
202 );
203 }
204
205 public function register() {
206 register_block_type( 'ultimate-post/post-module-2',
207 array(
208 'editor_script' => 'ultp-blocks-editor-script',
209 'editor_style' => 'ultp-blocks-editor-css',
210 'render_callback' => array($this, 'content')
211 )
212 );
213 }
214
215 public function content($attr, $noAjax) {
216 $attr = wp_parse_args($attr, $this->get_attributes());
217 global $unique_ID;
218
219 if (!$noAjax) {
220 $paged = is_front_page() ? get_query_var('page') : get_query_var('paged');
221 $attr['paged'] = $paged ? $paged : 1;
222 }
223 if($attr['queryUnique'] && isset($attr['savedQueryUnique'])) {
224 $unique_ID = $attr['savedQueryUnique'];
225 }
226
227 $block_name = 'post-module-2';
228 $wraper_before = $wraper_after = $post_loop = '';
229 $attr['queryNumber'] = ultimate_post()->get_post_number(5, $attr['queryNumber'], $attr['queryNumPosts']);
230 $recent_posts = new \WP_Query( ultimate_post()->get_query( $attr ) );
231 $pageNum = ultimate_post()->get_page_number($attr, $recent_posts->found_posts);
232 // Dummy Img Url
233 $dummy_url = ULTP_URL.'assets/img/ultp-fallback-img.png';
234
235 // Loadmore and Unique content
236 if($attr['queryUnique'] && isset($attr['loadMoreQueryUnique']) && $attr['paginationShow'] && ($attr['paginationType'] == 'loadMore')) {
237 $unique_ID = $attr['loadMoreQueryUnique'];
238 $current_unique_posts = $attr['ultp_current_unique_posts'];
239 }
240
241 if ($recent_posts->have_posts()) {
242
243 // Pagination Block Html
244 include ULTP_PATH . 'blocks/template/pagination_block.php';
245
246 $attr['className'] = isset($attr['className']) && $attr['className'] ? preg_replace('/[^A-Za-z0-9_ -]/', '', $attr['className']) : '';
247 $attr['align'] = isset($attr['align']) && $attr['align'] ? preg_replace('/[^A-Za-z0-9_ -]/', '', $attr['align']) : '';
248 $attr['advanceId'] = isset($attr['advanceId']) ? sanitize_html_class( $attr['advanceId'] ) : '';
249 $attr['blockId'] = isset($attr['blockId']) ? sanitize_html_class( $attr['blockId'] ) : '';
250 $attr['contentTag'] = in_array( $attr['contentTag'], ultimate_post()->ultp_allowed_block_tags() ) ? $attr['contentTag'] : 'div';
251 $attr['layout'] = sanitize_html_class( $attr['layout'] );
252 $attr['imgAnimation'] = sanitize_html_class( $attr['imgAnimation'] );
253 $attr['imgOverlayType'] = sanitize_html_class( $attr['imgOverlayType'] );
254 $attr['popupAutoPlay'] = $attr['popupAutoPlay'] == true ;
255 $attr['readMoreText'] = wp_kses($attr['readMoreText'], ultimate_post()->ultp_allowed_html_tags());
256 $attr['varticalAlign'] = sanitize_html_class( $attr['varticalAlign'] );
257
258 $wraper_before .= '<div '.( $attr['advanceId'] ? 'id="'.$attr['advanceId'].'" ':'' ).' class="ultp-post-grid-block wp-block-ultimate-post-'.$block_name.' ultp-block-'.$attr["blockId"].''.( $attr["align"] ? ' align' .$attr["align"]:'' ).''.( $attr["className"] ?' '.$attr["className"]:'' ) . '">';
259 $wraper_before .= '<div class="ultp-block-wrapper">';
260
261 // Loading
262 $wraper_before .= ultimate_post()->loading();
263
264 if ($attr['headingShow'] || $attr['filterShow'] || $attr['paginationShow']) {
265 $wraper_before .= '<div class="ultp-heading-filter">';
266 $wraper_before .= '<div class="ultp-heading-filter-in">';
267
268 // Heading
269 include ULTP_PATH.'blocks/template/heading.php';
270
271 if ($attr['filterShow'] || $attr['paginationShow']) {
272 $wraper_before .= '<div class="ultp-filter-navigation">';
273 // Filter
274 if($attr['filterShow'] && $attr['queryType'] != 'posts' && $attr['queryType'] != 'customPosts') {
275 include ULTP_PATH.'blocks/template/filter.php';
276 }
277 // Navigation
278 if ($attr['paginationShow'] && ($attr['paginationType'] == 'navigation') && ($attr['navPosition'] == 'topRight')) {
279 include ULTP_PATH.'blocks/template/navigation-before.php';
280 }
281 $wraper_before .= '</div>';
282 }
283
284 $wraper_before .= '</div>';
285 $wraper_before .= '</div>';
286 }
287
288 $wraper_before .= '<div class="ultp-block-items-wrap ultp-block-post-module2 ultp-block-content-'.$attr['varticalAlign'].' ultp-block-content-'.($attr['columnFlip'] ? 'true' : 'false').' ultp-'.$attr['layout'].'">';
289 $idx = 0; // $idx = $noAjax ? 1 : 0;
290 while ( $recent_posts->have_posts() ): $recent_posts->the_post();
291
292 include ULTP_PATH.'blocks/template/data.php';
293
294 include ULTP_PATH.'blocks/template/category.php';
295
296 if ($attr['queryUnique']) {
297 $unique_ID[$attr['queryUnique']][] = $post_id;
298 $current_unique_posts[] = $post_id;
299 }
300
301 $post_loop .= '<'.$attr['contentTag'].' class="ultp-block-item post-id-'.$post_id.'">';
302
303 $post_loop .= '<div class="ultp-block-content-wrap">';
304 if (($post_thumb_id || $attr['fallbackEnable']) && $attr['showImage'] && ($idx == 0 || ($attr['layout'] == 'layout2') || ($attr['layout'] == 'layout3') || ($attr['layout'] == 'layout5') )) {
305 $post_loop .= '<div class="ultp-block-image ultp-block-image-'.$attr['imgAnimation'].($attr["imgOverlay"] ? ' ultp-block-image-overlay ultp-block-image-'.$attr["imgOverlayType"].' ultp-block-image-'.$attr["imgOverlayType"].$idx : '' ).'">';
306 if ($idx == 0) {
307 $post_loop .= '<a href="'.$titlelink.'" '.($attr['openInTab'] ? 'target="_blank"' : '').'>';
308 // Post Image Id
309 $block_img_id = $post_thumb_id ? $post_thumb_id : ($attr['fallbackEnable'] && isset($attr['fallbackImg']['id']) ? $attr['fallbackImg']['id'] : '');
310 // Post Image
311 if($post_thumb_id || ($attr['fallbackEnable'] && $block_img_id)) {
312 $post_loop .= ultimate_post()->get_image($block_img_id, $attr['imgCrop'], '', $title, $attr['imgSrcset'], $attr['imgLazy']);
313 } else {
314 $video = ultimate_post()->get_youtube_id($post_video);
315 $post_loop .= '<img src="'.($video ? 'https://img.youtube.com/vi/'.$video.'/0.jpg' : $dummy_url).'" alt="dummy-img" />';
316 }
317 $post_loop .= '</a>';
318 } else {
319 if (($attr['layout'] == 'layout2') || ($attr['layout'] === 'layout3') || ($attr['layout'] === 'layout5')) {
320 // Image
321 $post_loop .= '<a href="'.$titlelink.'" '.($attr['openInTab'] ? 'target="_blank"' : '').'>';
322 // Post Image Id
323 $block_img_id = $post_thumb_id ? $post_thumb_id : ($attr['fallbackEnable'] && isset($attr['fallbackImg']['id']) ? $attr['fallbackImg']['id'] : '');
324 // Post Image
325 if($post_thumb_id || ($attr['fallbackEnable'] && $block_img_id)) {
326 $post_loop .= ultimate_post()->get_image($block_img_id, $attr['imgCropSmall'], '', $title, $attr['imgSrcset'], $attr['imgLazy']);
327 } else {
328 $video = ultimate_post()->get_youtube_id($post_video);
329 $post_loop .= '<img src="'.($video ? 'https://img.youtube.com/vi/'.$video.'/0.jpg' : $dummy_url).'" alt="dummy-img" />';
330 }
331 $post_loop .= '</a>';
332 }
333 if($post_video){
334 $post_loop .= '<div enableAutoPlay="'.$attr['popupAutoPlay'].'" class="ultp-video-icon">'.ultimate_post()->svg_icon('play_line').'</div>';
335 }
336 }
337 if (($attr['catPosition'] != 'aboveTitle') && ($idx == 0 || $attr['showSmallCat']) && $attr['catShow'] ) {
338 $post_loop .= '<div class="ultp-category-img-grid">'.$category.'</div>';
339 }
340 $post_loop .= '</div>';
341 if($post_video && $idx == 0){
342 $post_loop .= '<div enableAutoPlay="'.$attr['popupAutoPlay'].'" class="ultp-video-icon">'.ultimate_post()->svg_icon('play_line').'</div>';
343 }
344 }
345 $post_loop .= '<div class="ultp-block-content">';
346 // Category
347 if (($attr['catPosition'] == 'aboveTitle') && ($idx == 0 || $attr['showSmallCat'] ) && $attr['catShow']) {
348 $post_loop .= $category;
349 }
350 // Title
351 if ($title && $attr['titleShow'] && $attr['titlePosition'] == 1) {
352 include ULTP_PATH.'blocks/template/title.php';
353 }
354 // Meta
355 if ($attr['metaPosition'] =='top' ) {
356 include ULTP_PATH.'blocks/template/meta.php';
357 }
358 // Title
359 if ($title && $attr['titleShow'] && $attr['titlePosition'] == 0) {
360 include ULTP_PATH.'blocks/template/title.php';
361 }
362 // Large Excerpt
363 if ($idx == 0 && $attr['excerptShow']) {
364 $post_loop .= '<div class="ultp-block-excerpt">'.ultimate_post()->get_excerpt($post_id, $attr['showSeoMeta'], $attr['showFullExcerpt'], $attr['excerptLimit']).'</div>';
365 }
366 // Small Excerpt
367 if ($idx != 0 && $attr['showSmallExcerpt']) {
368 $post_loop .= '<div class="ultp-block-excerpt">'.ultimate_post()->get_excerpt($post_id, $attr['showSeoMeta'], $attr['showFullExcerpt'], $attr['smallExcerptLimit']).'</div>';
369 }
370 // Read More
371 if ($attr['readMore'] && ($idx == 0 || $attr['showSmallBtn'])) {
372 $post_loop .= '<div class="ultp-block-readmore"><a aria-label="'.$title.'" href="'.$titlelink.'" '.($attr['openInTab'] ? 'target="_blank"' : '').'>'.($attr['readMoreText'] ? $attr['readMoreText'] : esc_html__( "Read More", "ultimate-post" )).ultimate_post()->svg_icon($attr['readMoreIcon']).'</a></div>';
373 }
374 // Bottom
375 if ($attr['metaPosition'] =='bottom' ) {
376 include ULTP_PATH.'blocks/template/meta.php';
377 }
378 $post_loop .= '</div>';
379 $post_loop .= '</div>';
380 if($post_video && $attr['enablePopup'] && ($attr['layout'] != 'layout1' && $attr['layout'] != 'layout4' || $idx == 0)) {
381 include ULTP_PATH.'blocks/template/video_popup.php';
382 }
383 $post_loop .= '</'.$attr['contentTag'].'>';
384
385 if ($idx == 0) {
386 $bigloop = $post_loop;
387 $post_loop = '';
388 }
389
390 $idx ++;
391 endwhile;
392 if($attr['queryUnique']) {
393 $post_loop .= "<span style='display: none;' class='ultp-current-unique-posts' data-ultp-unique-ids= ".wp_json_encode($unique_ID)." data-current-unique-posts= ".wp_json_encode($current_unique_posts)."> </span>";
394 }
395 $bigloop = '<div class="ultp-big-post-module2">'.$bigloop.'</div>';
396 $post_loop = $bigloop.'<div class="ultp-small-post-module2">'.$post_loop.'</div>';
397
398 if ( $attr['advPaginationEnable'] && ($attr['paginationType'] == 'loadMore')) {
399 $wraper_after .= '<span class="ultp-loadmore-insert-before"></span>';
400 }
401
402 $wraper_after .= '</div>';//ultp-block-items-wrap
403 $wraper_after .= $pagi_block_html;
404 $wraper_after .= '</div>';
405 $wraper_after .= '</div>';
406
407 wp_reset_query();
408 }else {
409 $wraper_before .= ultimate_post()->get_no_result_found_html( $attr['notFoundMessage'] );
410 }
411
412 return $noAjax ? $post_loop : $wraper_before.$post_loop.$wraper_after;
413 }
414 }