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)

Read More

I hope I was clear thanks for your valuable help.

Related posts

Leave a Reply

2 comments

  1. 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.

  2. 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 -->