Recent Posts Change On page-by-page basis

Hi there,

I am trying change the recent posts element to be different for different pages (using Advanced Custom Fields). On one page, I have events with event location and date added. I successfully changed functions.php to make that happen, but I need to have a “People” page with the recent posts element to have different layout / custom fields. Any thoughts on an if statement or anything? I have this code currently:

// Displaying Date/Location in Recent Posts
// =============================================================================

function x_shortcode_recent_posts_v2( $atts ) {
  extract( shortcode_atts( array(
'id'          => '',
'class'       => '',
'style'       => '',
'type'        => 'post',
'count'       => '',
'category'    => '',
'offset'      => '',
'orientation' => '',
'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 : '';
if( $type == 'post' ){
$category_type = 'category_name';
} elseif ($type == 'x-portfolio') {
 $category_type = 'portfolio-category';
} elseif ($type == 'special_offers') {
$category_type = 'category_name';
}
$offset        = ( $offset      != ''          ) ? $offset : 0;
$orientation   = ( $orientation != ''          ) ? ' ' . $orientation : ' horizontal';
$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 );

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

$q = new WP_Query( array(
  'orderby'          => 'date',
  'order'			 =>  'ASC',
  'post_type'        => "{$type}",
  'posts_per_page'   => "{$count}",
  'offset'           => "{$offset}",
  "{$category_type}" => "{$category}"
) );

if ( $q->have_posts() ) : while ( $q->have_posts() ) : $q->the_post();

  if ( $no_image == 'true' ) {
    $image_output       = '';
    $image_output_class = 'no-image';
  } else {
    $image              = wp_get_attachment_image_src( get_post_thumbnail_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( get_the_ID() ) . '" title="' . esc_attr( sprintf( __( 'Permalink to: "%s"', '__x__' ), the_title_attribute( 'echo=0' ) ) ) . '">'
             . '<article id="post-' . get_the_ID() . '" class="' . implode( ' ', get_post_class() ) . '">'
               . '<div class="entry-wrap">'
                 . $image_output
                 . '<div class="x-recent-posts-content">'
                   . '<h3 class="h-recent-posts">' . get_the_title() . '</h3>'
                   . '<span class="event-info">' . '<span class="event-date">' . get_field('event_date', $post->ID) . '</span>' . '<span class="event-location">&nbsp;|&nbsp;' . get_field('event_location', $post->ID) . '</span>'
                 . '</div>'
               . '</div>'
             . '</article>'
           . '</a>';

endwhile; endif; wp_reset_postdata();

$output .= '</div>';

return $output;
}

add_filter('wp_head', 'custom_recent_posts');
function custom_recent_posts() {
  remove_shortcode( 'x_recent_posts' );
  add_shortcode( 'x_recent_posts', 'x_shortcode_recent_posts_v2' );
}

Please let me know if you have any thoughts.

Thanks in advance.

Hello Matt,

Thank you for a very detailed post information. What you are trying to do might be possible by using a condition within your custom recent posts element code. You can insert the is_page() condition in displaying the output.
For example:

if ( is_page('About Us') ) {

  $output .= '<a class="x-recent-post' . $count . ' ' . $image_output_class . '" href="' . get_permalink( get_the_ID() ) . '" title="' . esc_attr( sprintf( __( 'Permalink to: "%s"', '__x__' ), the_title_attribute( 'echo=0' ) ) ) . '">'
             . '<article id="post-' . get_the_ID() . '" class="' . implode( ' ', get_post_class() ) . '">'
               . '<div class="entry-wrap">'
                 . $image_output
                 . '<div class="x-recent-posts-content">'
                   . '<h3 class="h-recent-posts">' . get_the_title() . '</h3>'
                   . '<span class="event-info">' . '<span class="event-date">' . get_field('event_date', $post->ID) . '</span>' . '<span class="event-location">&nbsp;|&nbsp;' . get_field('event_location', $post->ID) . '</span>'
                 . '</div>'
               . '</div>'
             . '</article>'
           . '</a>';

} else {

  $output .= '<a class="x-recent-post' . $count . ' ' . $image_output_class . '" href="' . get_permalink( get_the_ID() ) . '" title="' . esc_attr( sprintf( __( 'Permalink to: "%s"', '__x__' ), the_title_attribute( 'echo=0' ) ) ) . '">'
             . '<article id="post-' . get_the_ID() . '" class="' . implode( ' ', get_post_class() ) . '">'
               . '<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>'
               . '</div>'
             . '</article>'
           . '</a>';

}

You can check out this codex for more information about the different conditions that you can use:

Please note that custom coding is outside the scope of our support. Issues that might arise from the use of custom code and further enhancements should be directed to a third party developer.

Regards.

Thank you, that worked perfectly!

You’re welcome!
We really appreciate for letting us know that it has worked for you.

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