Pagination Wordpress
Dans le cadre de la mise en place d'une application Wordpress, il a été nécessaire de mettre en place une pagination des articles. Il est possible d'effectuer ceci manuellement. Mais le plugin simple-pagination va permettre de mettre en place ce type de fonctionnalité quasiment sans code.
Or son utilisation pose des problèmes lors de l'utilisation des fonctions get_posts ou WP_Query. Cet article succins se propose de décrire une mise en place du plugin.
Votre avis
Nobody voted on this yet
|
|
Installation
le plugin a été installé manuellement sur le site, en décompressant le contenu du paquet sous le répertoire wp-content/plugins
du site. Le contenu du paquet est le suivant.
+--- simple-pagination.php +--- css | +--- default.css | +--- sabros.us.css | +--- flickr.css | +--- digg.css +--- screenshot-3.png +--- screenshot-5.png +--- screenshot-4.png +--- screenshot-2.png +--- screenshot-1.png +--- readme.txt +--- languages | +--- simple-pagination-fr_FR.po | +--- simple-pagination-fr_FR.mo
Une fois décompressé, il faut activé le plugin depuis la console d'administration.
Utilisation
Avant toute chose, il faut prendre en considération que la fonction query_posts est décriée, car elle remplace la requête principale lors de l'affichage. Un article très complet milite pour ne plus utilisé celle-ci. Fort de cet avertissement, le code a été écrit avec la fonction get_posts.
<?php
$pageNumber = get_query_var('paged');
if ( !$pageNumber ) :
$pageNumber = 1;
endif;
$posts = get_posts(array(
'category_name' => 'my-ctegorie',
'order' => 'DESC',
'paged' => $pageNumber,
'posts_per_page' => 10
));
if( $posts ) :
foreach( $posts as $post ) :
setup_postdata($post);
?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<p>
<?php
$excerpt = get_the_excerpt();
echo string_limit_words($excerpt, 30);
?>
</p>
<?php
endforeach;
wp_reset_postdata();
endif;
if(function_exists('wp_simple_pagination')) {
wp_simple_pagination();
}
?>
Cela ne fonctionnant pas, la fonction WP_Query a été utilisée, qui est appelée par get_posts.
<?php
$pageNumber = get_query_var('paged');
if ( !$pageNumber ) :
$pageNumber = 1;
endif;
$the_query = new WP_Query(array(
'category_name' => 'my-ctegorie',
'order' => 'DESC',
'paged' => $pageNumber,
'posts_per_page' => 10
));
while ($the_query->have_posts()) :
$the_query->the_post();
?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<p>
<?php
$excerpt = get_the_excerpt();
echo string_limit_words($excerpt, 30);
?>
</p>
<?php
wp_reset_postdata();
endwhile;
if(function_exists('wp_simple_pagination')) {
wp_simple_pagination();
}
?>
Mais rien n'y faisait, l'affichage en présentait pas les liens de pagination.
Solution
Malgré le militantisme contre la fonction query_posts, il semblerait que le plugin s'appuye sur la requête principale et qu'il ne soit pas possible de passer outre. Le code a du être transformé ainsi.
<?php
$pageNumber = get_query_var('paged');
if ( !$pageNumber ) :
$pageNumber = 1;
endif;
query_posts(array(
'category_name' => 'my-ctegorie',
'order' => 'DESC',
'paged' => $pageNumber,
'posts_per_page' => 10
));
while (have_posts()) :
the_post();
?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<p>
<?php
$excerpt = get_the_excerpt();
echo string_limit_words($excerpt, 30);
?>
</p>
<?php
wp_reset_postdata();
endwhile;
if(function_exists('wp_simple_pagination')) {
wp_simple_pagination();
}
wp_reset_query();
?>
Comme la fonction remplace la requête principale, il est impératif de la restaurer à l'aide de la fonction wp_reset_query. D'ailleurs en lisant attentivement la documentation de query_posts, cela est clairement indiqué en début de documentation.
En conclusion, il semblerait donc qu'il soit obligatoire d'utiliser cette fonction malgré tout, mais en faisant bien attention.