WordPress – query 5 posts with a specific post in top

Many searches and tests but in vain, I need an expert to rescue me.

I need a custom post query in worpdress, which returns only 5 posts starting from a specific post. In other terms, there is a div in single.php where i need the list of 5 posts starting from the current post (the post returned by single.php)

I hope I was clear thanks for your valuable help.

Solutions Collecting From Web of "WordPress – query 5 posts with a specific post in top"

You can do this by using get_adjacent_post() and the filter get_previous_post_where or get_next_post_where. You’ll call get_adjacent_post() as normal, but you’ll need to change the LIMIT to 5, using the filter.

I wasn’t sure from the question whether or not you wanted to have the current post be first. If you do, you’ll need to set the LIMIT to 4 and then use the current postdata to generate the first post.

I would create an array of post ids, and then use get_post() when you iterate through them, as I believe that get_adjacent_post() will return raw rows from the database.

You have to keep resetting the $post variable to advance the loops post counter.

Use something like this:

    global $post;
    get_header(); ?>

    <div id="container">
        <div id="content" role="main">

        <?php
        /* Run the loop to output the post.
         * If you want to overload this in a child theme then include a file
         * called loop-single.php and that will be used instead.
         */
        if(have_posts()) while(have_posts()): the_post();
            the_title();
            for($i = 0;$i < 4;$i++)
            {
                $post = get_next_post();
                setup_postdata($post);
                if(!empty($post))
                {
                    echo '<br/>';
                    the_title();
                    //or whatever code you need to output
                }
                else
                {
                    //no next post found
                }
            }
        endwhile;
        wp_reset_postdata();
        ?>

        </div><!-- #content -->
    </div><!-- #container -->