WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am trying to get paging to work on my future post loop, but to no avail. I am getting no links, when I expect them at the bottom, for pagination despite there being several valid posts in the database.

$args = array( 
    'post_type' => 'program',
    'paged' => get_query_var('paged') ? get_query_var('paged') : 1,
    'posts_per_page' => 1,
    'post_status' => "future",
    'order_by' => 'date',
    'order' => 'ASC'
$program = new WP_Query;
$program->query( $args );

if($program->have_posts()): while($program->have_posts()): $program->the_post(); ?>

//The content loop
<?php endwhile; ?> 
    <div><?php previous_posts_link('&laquo; Previous'); ?></div>
    <div><?php next_posts_link('More &raquo;'); ?></div>
<?php endif; ?> 
<?php wp_reset_query(); ?>

Update Further Info

I have established that $program->max_num_pages always displays the correct number of pages, so using the offset argument for WP_Query, I have been able to roll my own paging. But this seems like it's asking for trouble!!

Update Further Info

I have taken the rather drastic step of extending the WP_Query object. This is really over the top, but I have to make this work:

class MF_Query extends WP_Query{
    function __construct(array $args){
        if(!array_key_exists('posts_per_page',$args)) $args['posts_per_page'] = 10;

        $args['offset'] = (isset($_GET['page'])?($_GET['page']-1)*$args['posts_per_page']:0);

    function mf_next_page($link_text = "Next"){

            $curPage = intval((isset($_GET['page'])?$_GET['page']:1));//Use 1 if $_GET['page'] not set

            $link = "<a href='".remove_post_vars(curPageURL());

                return $link.constructQuery($this->merge(array("page"=>$curPage+1),$_GET))."'>".$link_text."</a>";
            } else {
                return false;

    function mf_prev_page($link_text = "Prev"){

            $curPage = (isset($_GET['page'])?$_GET['page']:1);//Use 1 if $_GET['page'] not set
            $link = "<a href='".remove_post_vars(curPageURL());
                return $link.$this->constructQuery($this->merge(array("page"=>$curPage-1),$_GET))."'>$link_text</a>";
            } else {
                return false;

    private function constructQuery(array $query){

        $url_ext = "?";
        foreach($query as $k => $v){
            $url_ext .=$k."=".$v."&amp;";
        $url_ext = substr($url_ext, 0, -5);//chop last ampersand off

        return $url_ext;

    private function merge($get, $put){
        //Get values from one array, and put them in another (overriding existing values if appropriate)
        foreach ($get as $k => $v){
        return $put;


share|improve this question
up vote 2 down vote accepted

Adjacent post fetching relies on quite a bit of custom SQL inside. One of the assumptions it makes in that SQL is that you are only looking for published post.

You can use filter in get_adjacent_post() (that is used internally by those next/previous functions) to alter the query and get rid of published only limitation.

share|improve this answer
In your opinion, is there anything innately wrong with my current approach? Because it is working, so would save having to start working another solution out! – Mild Fuzz Jul 27 '11 at 9:13
@Mild Fuzz lol, I don't even get what your current approach does, so no opinion on that :) – Rarst Jul 27 '11 at 12:07
ha, it adds new "next" and "previous" page link methods creating pages via a get variable. I use this with the using the $max_num_pages property of the WP_Query object to determine loop offset on each page. – Mild Fuzz Jul 27 '11 at 12:27

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.