Latest Posts block
-
Hi,
I am just discovering the new editor and I am pleased to find the possibility to add a Latest Posts block in my pages (Widgets > Latest Post). It is a great feature that would allow me to drop Latest Posts plug-ins!
Problem: it only shows the Post title.
Does someone know how I could also show the Post Thumbnail and Excerpt? It is not possible from the editing interface (at least from what I see), but it is probably something possible through php files.Thank you and happy holidays to y’all,
Florian-
This topic was modified 7 years, 5 months ago by
florianwilhelm.
-
This topic was modified 7 years, 5 months ago by
-
Hi,
I found the file to edit:
In wordpress folder, wp-includes/blocks/latest-posts.phpI had success putting the post thumbnail but when I try to have the post excerpt, it shows the current page excerpt instead of the post’s.
I edited only a small part of the code (line 39):
$list_items_markup .= sprintf( '<li> <a href="%2$s">%1$s%3$s</a><p>%4$s</p>', get_the_post_thumbnail( $post_id ), esc_url( get_permalink( $post_id ) ), esc_html( $title ), get_the_excerpt( $post_id ) );Here is the complete code (edited by me):
<?php /** * Server-side rendering of the <code>core/latest-posts</code> block. * * @package WordPress */ /** * Renders the <code>core/latest-posts</code> block on server. * * @param array $attributes The block attributes. * * @return string Returns the post content with latest posts added. */ function render_block_core_latest_posts( $attributes ) { $args = array( 'numberposts' => $attributes['postsToShow'], 'post_status' => 'publish', 'order' => $attributes['order'], 'orderby' => $attributes['orderBy'], ); if ( isset( $attributes['categories'] ) ) { $args['category'] = $attributes['categories']; } $recent_posts = wp_get_recent_posts( $args ); $list_items_markup = ''; foreach ( $recent_posts as $post ) { $post_id = $post['ID']; $title = get_the_title( $post_id ); if ( ! $title ) { $title = __( '(Untitled)' ); } $list_items_markup .= sprintf( '<li> <a href="%2$s">%1$s%3$s</a><p>%4$s</p>', get_the_post_thumbnail( $post_id ), esc_url( get_permalink( $post_id ) ), esc_html( $title ), get_the_excerpt( $post_id ) ); 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_id ) ), esc_html( get_the_date( '', $post_id ) ) ); } $list_items_markup .= "</li>\n"; } $class = 'wp-block-latest-posts'; if ( isset( $attributes['align'] ) ) { $class .= ' align' . $attributes['align']; } 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['className'] ) ) { $class .= ' ' . $attributes['className']; } $block_content = sprintf( '<ul class="%1$s">%2$s</ul>', esc_attr( $class ), $list_items_markup ); return $block_content; } /** * Registers the <code>core/latest-posts</code> block on server. */ function register_block_core_latest_posts() { register_block_type( 'core/latest-posts', array( 'attributes' => array( 'categories' => array( 'type' => 'string', ), 'className' => array( 'type' => 'string', ), 'postsToShow' => array( 'type' => 'number', 'default' => 5, ), 'displayPostDate' => array( 'type' => 'boolean', 'default' => false, ), 'postLayout' => array( 'type' => 'string', 'default' => 'list', ), 'columns' => array( 'type' => 'number', 'default' => 3, ), 'align' => array( 'type' => 'string', ), 'order' => array( 'type' => 'string', 'default' => 'desc', ), 'orderBy' => array( 'type' => 'string', 'default' => 'date', ), ), 'render_callback' => 'render_block_core_latest_posts', ) ); } add_action( 'init', 'register_block_core_latest_posts' );As I said, thumbnail is working well, so I don’t really get why the excerpt doesn’t.
Much appreciation to any help,
Florian-
This reply was modified 7 years, 5 months ago by
florianwilhelm.
Hi,
Removing get_ from get_the_excerpt doesn’t change anything for me, it still displays the current page excerpt instead of the $post_id one.
I think it comes from the fact it doesn’t get $post_id as a valid argument, and the default value get_the_excerpt() and the_excerpt() are the global post (the current page/post).
My knowledges in PhP are not so good, which makes it hard for me to identify clearly the problem.By the way, I tried adding manualy an excerpt to my post with <!–more–> just to be sure it was not a conflict caused by the lack of excerpt in my post, but it doesn’t change anything to my Latest Posts block.
Hi,
I solved my problem using the following piece of code:
foreach ( $recent_posts as $post ) { $post_id = $post['ID']; $title = get_the_title( $post_id ); if ( ! $title ) { $title = __( '(Untitled)' ); } $post_url = get_permalink( $post_id ); $text = get_post( $post_id ); $text = $text->post_content; $text = wp_trim_words( $text, 25, '... <a href="'.$post_url.'">read more</a>' ); $excerpt = $text; $list_items_markup .= sprintf( '<li> <a href="%2$s">%1$s%3$s</a><p>%4$s</p>', get_the_post_thumbnail( $post_id ), esc_url( get_permalink( $post_id ) ), esc_html( $title ), $excerpt );It shows the target post 25 first words and I put a link on the read more to access said post. It might not be the best way to do this but it works, which makes it the best way for me 😀
Hope it might help if someone has the same issue.
Have a nice day,
Florian-
This reply was modified 7 years, 5 months ago by
florianwilhelm. Reason: solved
Hi Florian, thanks for your post and the solutions.
I want to accomplish the same thing, But what happens when wordpress makes an update and you do the automatic update? Your change will be overridden with the new wp-include/blocks php right? Is there a way to make this local to the theme?As it goes to wp-include, i don’t think you can include it to a theme or whatever.
My take on this at the moment is just to keep it in mind each time I have a wp update, which of course is not the best :/Right… thanks for replying.
Thank you for posting this, I would like to add that support for post_thumbnails needs to be activated on the theme for this to work:
https://codex.ww.wp.xz.cn/Post_Thumbnails#Enabling_Support_for_Post_Thumbnailshi i has problem, in latest posts, PoststoShows just 100 posts limit, how i can increas the number of latest posts displayed from 100 to 1000 or deep ?
Sorry for my english
Thankyou somuchOne more query. Pl, help me. I want to make my post like this below link. Pl look
https://www.islamicfinder.org/hadith/ibn-majah/mosques-and-the-congregations/
Separate block in each thought (center block). How can I do it? Many thanks in advance.
-
This reply was modified 7 years, 5 months ago by
The topic ‘Latest Posts block’ is closed to new replies.