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 );