I’m searching to create a shortcode inside function.php child theme, to show last updated posts with thumbnail.
I have this code that works into page template:
<ol class="list-numbered">
<?php
// Show recently modified posts
$recently_updated_posts = new WP_Query( array(
'post_type' => 'post',
'posts_per_page' => '13',
'orderby' => 'modified',
'no_found_rows' => 'true' // speed up query when we don't need pagination
) );
if ( $recently_updated_posts->have_posts() ) :
while( $recently_updated_posts->have_posts() ) : $recently_updated_posts->the_post(); ?>
<li><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?>
<?php
$size = 'thumbnail';
$attachments = get_children( array(
'post_parent' => get_the_ID(),
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'ASC',
'orderby' => 'menu_order ID',
'numberposts' => 1)
);
foreach ( $attachments as $thumb_id => $attachment ) {
echo wp_get_attachment_image($thumb_id, $size);
}
?>
</a></li>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</ol>
But I would insert into functions.php file and call the shortcode.
Do you have some ideas?
Thanks in advance.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can do this like bellow
// register shortcode
add_shortcode('last-modified', 'last_mofied_shortcode_callback');
function last_mofied_shortcode_callback() {
$output = '<ol class="list-numbered">';
$recently_updated_posts = new WP_Query( array(
'post_type' => 'post',
'posts_per_page' => '13',
'orderby' => 'modified',
'no_found_rows' => 'true' // speed up query when we don't need pagination
) );
if ( $recently_updated_posts->have_posts() ) :
while( $recently_updated_posts->have_posts() ) : $recently_updated_posts->the_post();
$output .= '<li><a href="'.get_the_permalink().'" rel="bookmark" title="'.get_the_title().'">'.get_the_title();
$size = 'thumbnail';
$attachments = get_children( array(
'post_parent' => get_the_ID(),
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'ASC',
'orderby' => 'menu_order ID',
'numberposts' => 1));
foreach ( $attachments as $thumb_id => $attachment ) {
$output .= wp_get_attachment_image($thumb_id, $size);
}
$output .= '</a></li>';
endwhile;
wp_reset_postdata();
endif;
return $output;
}
And now you can use [last-modified] shortcode anywhere within content. if you want to use in php files then just use it like echo do_shortcode('[last-modified]');
Read more about add_shortcode() here
Method 2
This code works well.
I added category_name in $recently_updated_posts to show recently updated post for each category, and it works too.
When I try to add get_category_link() and get_the_category() returns “Array” instead the category links and the category name.
Where do I wrong?
Thanks in advance.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0