Cannot view full post with "recent post" element

Hello, I would like to show a full post on a non-archive/index page…
See the weather forecast here:
http://cbavalanchecenter.org/avi-home/
and in a screenshot here:

How do I override the default settings in the ‘recent posts’ element to show the full post?

Thank you in advance for your help,
Rob

Hi Rob,

Please install and activate the child theme and login through FTP then edit the functions.php then add this code:

function x_shortcode_recent_posts_v2( $atts ) {
  extract( shortcode_atts( array(
    'id'           => '',
    'class'        => '',
    'style'        => '',
    'type'         => 'post',
    'count'        => '',
    'category'     => '',
    'offset'       => '',
    'orientation'  => '',
    // 'show_excerpt' => 'true',
    'no_sticky'    => '',
    'no_image'     => '',
    'fade'         => ''
  ), $atts, 'x_recent_posts' ) );

  $allowed_post_types = apply_filters( 'cs_recent_posts_post_types', array( 'post' => 'post' ) );
  $type = ( isset( $allowed_post_types[$type] ) ) ? $allowed_post_types[$type] : 'post';

  $id            = ( $id           != ''     ) ? 'id="' . esc_attr( $id ) . '"' : '';
  $class         = ( $class        != ''     ) ? 'x-recent-posts cf ' . esc_attr( $class ) : 'x-recent-posts cf';
  $style         = ( $style        != ''     ) ? 'style="' . $style . '"' : '';
  $count         = ( $count        != ''     ) ? $count : 3;
  $category      = ( $category     != ''     ) ? $category : '';
  $category_type = ( $type         == 'post' ) ? 'category_name' : 'portfolio-category';
  $offset        = ( $offset       != ''     ) ? $offset : 0;
  $orientation   = ( $orientation  != ''     ) ? ' ' . $orientation : ' horizontal';
  // $show_excerpt  = ( $show_excerpt == 'true' );
  $no_sticky     = ( $no_sticky    == 'true' );
  $no_image      = ( $no_image     == 'true' ) ? $no_image : '';
  $fade          = ( $fade         == 'true' ) ? $fade : 'false';

  $js_params = array(
    'fade' => ( $fade == 'true' )
  );

  $data = cs_generate_data_attributes( 'recent_posts', $js_params );

  $posts = get_posts( array(
    'orderby'             => 'date',
    'post_type'           => "{$type}",
    'posts_per_page'      => "{$count}",
    'offset'              => "{$offset}",
    "{$category_type}"    => "{$category}",
    'ignore_sticky_posts' => $no_sticky
  ) );

  $output = "<div {$id} class=\"{$class}{$orientation}\" {$style} {$data} data-fade=\"{$fade}\" >";

    foreach ($posts as $post) {

      if ( $no_image == 'true' ) {
        $image_output       = '';
        $image_output_class = 'no-image';
      } else {
        $image              = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'entry-cropped' );
        $bg_image           = ( $image[0] != '' ) ? ' style="background-image: url(' . $image[0] . ');"' : '';
        $image_output       = '<div class="x-recent-posts-img"' . $bg_image . '></div>';
        $image_output_class = 'with-image';
      }

      $output .= '<a class="x-recent-post' . $count . ' ' . $image_output_class . '" href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( csi18n('shortcodes.recent-posts-permalink'), the_title_attribute( array( 'echo' => false, 'post' => $post->ID ) ) ) ) . '">'
                 . '<article id="post-' . $post->ID . '" class="' . implode( ' ', get_post_class('', $post->ID) ) . '">'
                   . '<div class="entry-wrap">'
                     . $image_output
                     . '<div class="x-recent-posts-content">'
                       . '<h3 class="h-recent-posts">' . get_the_title( $post->ID ) . '</h3>'
                       . '<span class="x-recent-posts-date">' . get_the_date( '', $post->ID ) . '</span>'
                       . '<div class="x-recent-posts-full-content">' . get_the_content( null, null, $post->ID )  . '</div>'
                     . '</div>'
                   . '</div>'
                 . '</article>'
               . '</a>';

    }

  $output .= '</div>';

  return $output;
}
  add_filter('wp_head', 'x_recent_posts_full');
  
  function x_recent_posts_full() {
    remove_shortcode( 'x_recent_posts' );
    remove_shortcode( 'recent_posts' );
    add_shortcode( 'x_recent_posts', 'x_shortcode_recent_posts_v2' );
    add_shortcode( 'recent_posts', 'x_shortcode_recent_posts_v2' );
  }

Kindly note that since this is a custom code that changes the default behavior/display of the theme, you will be responsible to maintain or update the code in case you require further changes or if the code stops working in future updates. If you are uncertain how to proceed, it would be best to get in touch with a developer.

Hope this helps.

Thanks Jade,
I already had a child theme activated, so I added the code you provided at the end of the functions.php, and then the page broke. I have removed the code for now.
here is a screencast of what happened: https://drive.google.com/file/d/1fG5RznS8l9ptcC_GUoIFD9fjhG4wjccA/view

Thank you!
Rob

Hi Rob,

I think what might be happening here is that the full post was created in the Content Builder. This isn’t something we can support, as there are other processes that need to happen like loading the styles for those posts in the head of the document.

One thing you can do is make this adjustment to the code above:

'<div class="x-recent-posts-full-content">' . apply_filters( 'the_content', get_the_content( null, null, $post->ID ) )  . '</div>'

Running apply_filters( 'the_content', $content ); on something applies the WordPress formatting and processes all shortcodes, so that would be helpful to make it look more like the original.

I still wouldn’t however expect it to work if you’re using the content builder to build the posts on your site. It might be possible to achieve this, but would take some custom development which is outside the scope of support we can offer.

There is precedent in Cornerstone for loading “full page content” in another context. With Global Blocks we’ve solved some of these challenges. A Global Block itself is not much more than a page technically speaking, and it is something you can place anywhere and it will include all the correct styles and resources. The one way I see this working would be to create a Global Block for each post, and set the post content to just the Global Block shortcode (through Gutenburg, not the Content Builder). This would get you closer to what you’re looking for. I wouldn’t advise showing more than 3-4 at a time since you’re running several more database queries at that point.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.