0

Problem: it only shows the Post title.

I need to add featured image / thumbnail and post excerpt in block latest-posts...

I found the file to edit: In wordpress folder, wp-includes/blocks/latest-posts.php

How would I modify the code below and paste it in a plugin or possibly in my functions.php file.

thanks

<?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' );
  • Technically the same problem: change the sort order. Easy to do in the original function - but how to get it into functions.php as an override? – Ralf Apr 1 at 16:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.