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('« Previous'); ?></div>
<div><?php next_posts_link('More »'); ?></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."&";
}
$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;
}
}
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.