web-dev-qa-db-fra.com

Paging sur une future boucle de publication?

J'essaie de faire fonctionner la pagination sur ma future boucle de publication, mais en vain. Je ne reçois aucun lien, quand je m'attends à ce qu'il se trouve au bas de la liste, pour la pagination malgré la présence de plusieurs messages valides dans la base de données.

<?php
$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(); ?>

Mettre à jour Informations complémentaires

J'ai établi que $ programme-> max_num_pages affiche toujours le nombre correct de pages. Par conséquent, en utilisant l'argument offset pour WP_Query, j'ai pu lancer ma propre pagination. Mais on dirait que c'est demander des ennuis !!


Mettre à jour Informations complémentaires

J'ai pris la mesure assez radicale d'étendre l'objet WP_Query. C'est vraiment exagéré, mais je dois faire ce travail:

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);
        parent::query($args);
    }

    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());

            if($curPage<$this->max_num_pages){
                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());
            if($curPage>1){
                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){
                $put[$k]=$v;
        } 
        return $put;

    }


}
2
Mild Fuzz

La post-extraction adjacente repose sur un peu de SQL personnalisé à l'intérieur. L'une des hypothèses avancées dans SQL est que vous ne recherchez que les publications.

Vous pouvez utiliser le filtre dans get_adjacent_post() (utilisé en interne par les fonctions suivante/précédente) pour modifier la requête et supprimer les limitations publiées.

2
Rarst