Pagination Wordpress

De EjnTricks
Révision de 15 septembre 2015 à 23:31 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

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.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


System-Install-icon.png 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.


Process-Icon.png 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.


Examples-icon.png 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();
	?>


Warning-icon.png 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.