Using the Display Posts Shortcode Output Filter

The output filter lets you add, remove, edit, and re-order the elements that make up each post listing. Here are some examples.

Moving the image after the title

/**
 * Display Posts Shortcode - Move image after title
 * @link https://www.billerickson.net/code/using-display-posts-shortcode-output-filter
 *
 */
function be_dps_move_image_after_title( $output, $original_atts, $image, $title, $date, $excerpt, $inner_wrapper, $content, $class, $author, $category_display_text ) {
  $output = '<' . $inner_wrapper . ' class="' . implode( ' ', $class ) . '">' . $title . $image . $date . $author . $category_display_text . $excerpt . $content . '</' . $inner_wrapper . '>';
  return $output;
}
add_filter( 'display_posts_shortcode_output', 'be_dps_move_image_after_title', 10, 11 );

Moving the date after the content

/**
 * DPS - Move date after content 
 * @link https://www.billerickson.net/code/using-display-posts-shortcode-output-filter
 *
 */
function be_dps_move_date_after_content( $output, $original_atts, $image, $title, $date, $excerpt, $inner_wrapper, $content, $class, $author, $category_display_text ) {
  $output = '<' . $inner_wrapper . ' class="' . implode( ' ', $class ) . '">' . $image . $title . $author . $category_display_text . $excerpt . $content . $date . '</' . $inner_wrapper . '>';
  return $output;
}
add_filter( 'display_posts_shortcode_output', 'be_dps_move_date_after_content', 10, 11 );

Copy this line from the plugin, then move the elements around as you see fit, then return the output.

Add Time

/**
 * Add Time to Display Posts Shortcode
 * @author Bill Erickson
 * @link https://www.billerickson.net/code/add-time-to-display-posts-shortcode/
 *
 * @param $output string, the original markup for an individual post
 * @param $atts array, all the attributes passed to the shortcode
 * @param $image string, the image part of the output
 * @param $title string, the title part of the output
 * @param $date string, the date part of the output
 * @param $excerpt string, the excerpt part of the output
 * @param $inner_wrapper string, what html element to wrap each post in (default is li)
 * @param $content string, post content
 * @param $class array, post classes
 * @return $output string, the modified markup for an individual post
 */
function be_display_posts_time( $output, $original_atts, $image, $title, $date, $excerpt, $inner_wrapper, $content, $class, $author, $category_display_text ) {
	// Find out if 'include_time=true' was added to  the shortcode
	$time = '';
	if( isset( $atts['include_time'] ) )
		$time = ' at ' . get_the_time( 'g:i a' );
	// Now let's rebuild the output and add the $time to it
	$output = '<' . $inner_wrapper . ' class="' . implode( ' ', $class ) . '">' . $image . $title . $date . $time . $author . $category_display_text . $excerpt . $content . '</' . $inner_wrapper . '>';
	// Finally we'll return the modified output
	return $output;
}
add_filter( 'display_posts_shortcode_output', 'be_display_posts_time', 10, 11 );

Bill Erickson

Bill Erickson is the co-founder and lead developer at CultivateWP, a WordPress agency focusing on high performance sites for web publishers.

About Me
Ready to upgrade your website?

I build custom WordPress websites that look great and are easy to manage.

Let's Talk