<?php $block_core_latest_posts_excerpt_length = 0; function block_core_latest_posts_get_excerpt_length() { global $block_core_latest_posts_excerpt_length; return $block_core_latest_posts_excerpt_length; } function render_block_core_latest_posts($attributes) { global $post, $block_core_latest_posts_excerpt_length; $args = array('posts_per_page' => $attributes['postsToShow'], 'post_status' => 'publish', 'order' => $attributes['order'], 'orderby' => $attributes['orderBy'], 'suppress_filters' => false); $block_core_latest_posts_excerpt_length = $attributes['excerptLength']; add_filter('excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20); if (isset($attributes['categories'])) { $args['category__in'] = array_column($attributes['categories'], 'id'); } if (isset($attributes['selectedAuthor'])) { $args['author'] = $attributes['selectedAuthor']; } $recent_posts = get_posts($args); $list_items_markup = ''; foreach ($recent_posts as $post) { $post_link = esc_url(get_permalink($post)); $list_items_markup .= '<li>'; if ($attributes['displayFeaturedImage'] && has_post_thumbnail($post)) { $image_style = ''; if (isset($attributes['featuredImageSizeWidth'])) { $image_style .= sprintf('max-width:%spx;', $attributes['featuredImageSizeWidth']); } if (isset($attributes['featuredImageSizeHeight'])) { $image_style .= sprintf('max-height:%spx;', $attributes['featuredImageSizeHeight']); } $image_classes = 'wp-block-latest-posts__featured-image'; if (isset($attributes['featuredImageAlign'])) { $image_classes .= ' align' . $attributes['featuredImageAlign']; } $featured_image = get_the_post_thumbnail($post, $attributes['featuredImageSizeSlug'], array('style' => $image_style)); if ($attributes['addLinkToFeaturedImage']) { $featured_image = sprintf('<a href="%1$s">%2$s</a>', $post_link, $featured_image); } $list_items_markup .= sprintf('<div class="%1$s">%2$s</div>', $image_classes, $featured_image); } $title = get_the_title($post); if (!$title) { $title = __('(no title)'); } $list_items_markup .= sprintf('<a href="%1$s">%2$s</a>', $post_link, $title); if (isset($attributes['displayAuthor']) && $attributes['displayAuthor']) { $author_display_name = get_the_author_meta('display_name', $post->post_author); $byline = sprintf(__('by %s'), $author_display_name); if (!empty($author_display_name)) { $list_items_markup .= sprintf('<div class="wp-block-latest-posts__post-author">%1$s</div>', esc_html($byline)); } } if (isset($attributes['displayPostDate']) && $attributes['displayPostDate']) { $list_items_markup .= sprintf('<time datetime="%1$s" class="wp-block-latest-posts__post-date">%2$s</time>', esc_attr(get_the_date('c', $post)), esc_html(get_the_date('', $post))); } if (isset($attributes['displayPostContent']) && $attributes['displayPostContent'] && isset($attributes['displayPostContentRadio']) && 'excerpt' === $attributes['displayPostContentRadio']) { $trimmed_excerpt = get_the_excerpt($post); $list_items_markup .= sprintf('<div class="wp-block-latest-posts__post-excerpt">%1$s</div>', $trimmed_excerpt); } if (isset($attributes['displayPostContent']) && $attributes['displayPostContent'] && isset($attributes['displayPostContentRadio']) && 'full_post' === $attributes['displayPostContentRadio']) { $list_items_markup .= sprintf('<div class="wp-block-latest-posts__post-full-content">%1$s</div>', wp_kses_post(html_entity_decode($post->post_content, ENT_QUOTES, get_option('blog_charset')))); } $list_items_markup .= "</li>\n"; } remove_filter('excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20); $class = 'wp-block-latest-posts__list'; if (isset($attributes['postLayout']) && 'grid' === $attributes['postLayout']) { $class .= ' is-grid'; } if (isset($attributes['columns']) && 'grid' === $attributes['postLayout']) { $class .= ' columns-' . $attributes['columns']; } if (isset($attributes['displayPostDate']) && $attributes['displayPostDate']) { $class .= ' has-dates'; } if (isset($attributes['displayAuthor']) && $attributes['displayAuthor']) { $class .= ' has-author'; } $wrapper_attributes = get_block_wrapper_attributes(array('class' => $class)); return sprintf('<ul %1$s>%2$s</ul>', $wrapper_attributes, $list_items_markup); } function register_block_core_latest_posts() { register_block_type_from_metadata(__DIR__ . '/latest-posts', array('render_callback' => 'render_block_core_latest_posts')); } add_action('init', 'register_block_core_latest_posts'); function block_core_latest_posts_migrate_categories($block) { if ('core/latest-posts' === $block['blockName'] && !empty($block['attrs']['categories']) && is_string($block['attrs']['categories'])) { $block['attrs']['categories'] = array(array('id' => absint($block['attrs']['categories']))); } return $block; } add_filter('render_block_data', 'block_core_latest_posts_migrate_categories');