Comme je l’ai mentionné dans un autre article du blog, Genesis est un framework wordpress qui présente de multiples avantages. Je m’appuie sur ce framework pour la plupart de mes projets en raison de sa simplicité et de sa légèreté.
Récemment, dans l’un des projets que je développais, je me suis trouvé dans le besoin de créer un loop query personnalisé pour afficher les éléments d’un custom post type. Bien que j’aie essayé d’ajouter de la pagination au loop, je n’ai pas réussi à la faire apparaître.
Après de nombreuses recherches, c’est la solution qui a fonctionné pour moi :
La pagination de Genesis utilise les fonctions de pagination standard de WordPress. Ces fonctions ne s’appliquent qu’à la requête principale de WordPress, et non aux requêtes personnalisées. C’est la raison pour laquelle, dans ma boucle personnalisée, je n’ai pas pu faire apparaître la pagination WordPress
La solution est de faire en sorte que votre requête personnalisée passe outre la variable globale $wp_query, ce qui fait croire aux fonctions WordPress qu’il s’agit de la requête principale. Ensuite, une fois que vous avez terminé la pagination, ajoutez la variable wp_reset_query() pour remettre la requête dans l’état où elle devrait être.
/**
* Genesis custom loop
*/
function dmkt_my_custom_loop() {
global $post;
// arguments
$args = array(
'post_type' => 'post',
'posts_per_page' => 6,
'paged' => get_query_var( 'paged' )
);
// The loop
global $wp_query;
$wp_query = new WP_Query( $args );
if ( have_posts() ) :
echo '<ul>';
while ( have_posts() ) : the_post();
echo '<li>' . get_the_title() . '</li>';
endwhile;
echo '</ul>';
do_action( 'genesis_after_endwhile' );
endif;
wp_reset_query();
}
add_action( 'genesis_loop', 'dmkt_my_custom_loop' );
remove_action( 'genesis_loop', 'genesis_do_loop' );
genesis();
Dans les arguments loop, il est important de passer l’attribut « paged » qui indiquera au loop la page à lister.
La variable du loop doit être la variable globale $wp-query qui remplacera le loop par défaut.
Il est important, après l’endif, de réinitialiser les variables globales avec wp_reset_query().