Beginner's Guide for WordPress - Start your WordPress Blog in minutes.
Choosing the Best
WordPress Hosting
How to Easily
Install WordPress
WordPress Plugins
View all Guides

How to Display the Latest Sticky Posts in WordPress

Last updated on by
Special WordPress Hosting offer for WPBeginner Readers
How to Display the Latest Sticky Posts in WordPress

WordPress has this very cool feature called sticky posts. Think of sticky posts as featured posts for your blog. When you mark a post as sticky, it shows up above your new posts, but only if your theme permits it. In this tutorial we will show you how to display the latest sticky posts in WordPress.

Latest Sticky Posts Demo

Note: This is an intermediate level tutorial and requires basic HTML / CSS knowledge + WordPress themes knowledge.

Video Tutorial

If you don’t like the video or need more instructions, then continue reading.

First thing you need to do is copy and paste this code snippet in your theme’s functions.php file or in a site-specific plugin.

function wpb_latest_sticky() { 

/* Get all sticky posts */
$sticky = get_option( 'sticky_posts' );

/* Sort the stickies with the newest ones at the top */
rsort( $sticky );

/* Get the 5 newest stickies (change 5 for a different number) */
$sticky = array_slice( $sticky, 0, 5 );

/* Query sticky posts */
$the_query = new WP_Query( array( 'post__in' => $sticky, 'ignore_sticky_posts' => 1 ) );
// The Loop
if ( $the_query->have_posts() ) {
	$return .= '<ul>';
	while ( $the_query->have_posts() ) {
		$return .= '<li><a href="' .get_permalink(). '" title="'  . get_the_title() . '">' . get_the_title() . '</a><br />' . get_the_excerpt(). '</li>';
	$return .= '</ul>';
} else {
	// no posts found
/* Restore original Post Data */

return $return; 

add_shortcode('latest_stickies', 'wpb_latest_sticky');

The code above queries the WordPress database to retrieve the 5 latest sticky posts. It then displays each sticky post’s title with a link in a list format. We have wrapped all that in a function and created a shortcode.

Now to display your latest sticky posts, you can use the shortcode [latest_stickies] in any WordPress post, page, or even a text widget.

If you would like to use shortcodes inside a text widget, then you will need to add this extra line of code in your theme’s functions.php or site-specific plugin.

add_filter('widget_text', 'do_shortcode');

This snippet and function can very well be used in featured slider, or any other advanced feature that you would like to display on your site. This snippet is mostly geared toward a WordPress site that has a custom homepage or a magazine style look.

That’s all, we hope this article helped you display latest sticky posts on your WordPress blog. You may also want to checkout our tutorial on how to add an expiration date to sticky posts in WordPress.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Google+.

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi. Page maintained by Syed Balkhi.

WPBeginner's Video Icon
Our HD-Quality tutorial videos for WordPress Beginners will teach you how to use WordPress to create and manage your own website in about an hour. Get started now »


  1. Dom says:

    Thanks for getting me on the right track!!
    The code works great in getting the Title to show up where the short code is pasted.

    However, I was trying to find a method to display the entire post (all content, in stead of just a title or even excerpt) on a specific page.

    I decided to play with your code above in order to try and achieve this and finally managed…
    Although the title displays the same size as paragraph text, I’m sure I can fix that.

    Here’s what I changed…please let me know if you think there’s something I should reconsider lest the whole world explodes ;)

    I simply changed your get_the_excerpt() text to get_the_content() and this successfully pulled in the entire blog post into that page.
    In order to remove the bulleted indentation I then removed the ” ” ” ” tags, but had to leave the apostrophes in place, otherwise the page wouldn’t load.
    So in essence, where ” or ” was before, now there is only ” and so on.

    That’s all I changed and it mostly works like a charm for me…
    There are 2 issues I noticed:
    1: Sometimes it loads most of the post, but not always right down to the end, especially if the post is edited afterwards…anyone with suggestions to ensure this doesn’t happen?
    2: I’d love if the featured image would also show up, this would make it the ultimate flexible solution! Any thoughts here?

    Thanks again for the advice!

    Hope what I explained makes sense to anyone who wants to achieve the same as I was after.

  2. Achi Baten says:

    How can i show homepage post like you?

  3. richard says:


    Thank you for your code. However i try to achieve something and i have 2 issues.

    I want to display only one sticky post on my home page and only the youtube video present on the content.

    ACtually i display the title and all the content of a post (include texts, pictures and videos).
    Second problem is that it display youtube as a link and not embed directly the video into my homepage.

    Thank you for your help

  4. Raviraj says:


    I have tried out with the code, It works fine when at least 1 post has been assigned as sticky post else when none of the posts are assigned a sticky, then it will display all latest 5 posts.

    So would be the condition to display only sticky posts, if there are no sticky posts assigned then It should not display anything.

    Thanks in advance

  5. WPBeginner Staff says:

    Thanks for pointing this out. We have updated the code.

  6. AnastisSourgoutsidis says:

    ‘caller_get_posts’ has been replaced by ‘ignore_sticky_posts’ since v3.1 so I think its important to change your code to reflect that.
    Also, a) $post->ID is not needed in this instance of get_permalink() as you’ve setup the post data by calling $the_query->the_post(), and if for whatever reason you still want to include $post->ID, you should be global-ing it, i.e. global $post;

Add a Comment

We're glad you have chosen to leave a comment. Please keep in mind that all comments are moderated according to our comment policy, and all links are nofollow. Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.