Bon, je l’admet, mon titre n’est pas très parlant, et j’ai eu du mal à en trouver qui vaille dire quelque chose…

Imaginez que vous aillez 50 billets de blog sur votre site. WordPress leur attribut à tous une date de publication qui vous permet de les afficher par ordre chronologique sur votre site.

Si vous lisez le premier article jamais écrit sur votre site, donc celui qui a la date la plus ancienne, vous serez en train de lire l’article 1/50, si vous lisez le plus récent ce sera l’article 50/50…

Cette fonction se base donc sur la date de publication d’un article pour le « positionner » par rapport aux autres.

function bweb_post_advance_counter( $current=null ) {
	//compteur X/XX
	$counter = null;
	if( $current ){
		global $wpdb;
		$query = "SELECT count(ID) FROM {$wpdb->posts} WHERE post_type='post' AND post_status='publish' AND post_date <= '$current'";    
		$count = $wpdb->get_var( $wpdb->prepare( $query, '' ) )+1;
		$counter .= $count.'/';
	}
	//Compteur total
	return $counter .= wp_count_posts( 'post' )->publish;
}

 

Une fois la fonction déclarée, vous l’utilisez de la manière suivante en collant son appel dans le template single.php

echo bweb_post_advance_counter( get_the_time( 'Y-m-d' ) );

 

Le fonctionnement est simple, on indique grâce à get_the_time la date de publication de l’article en cours de visionnage et grâce à une requête directement en base on détermine donc combien d’articles ont une date de publication antérieur à celle de l’article en question. Enfin on détermine le nombre total de posts et on obtient notre compteur.

Notez que vous pouvez très facilement modifier la fonction pour l’utiliser avec un custom post type, il vous suffit de changer les deux ‘post’ par l’identifiant de votre CPT.

 

Article rédigé parBrice CAPOBIANCO

Autodidacte passionné par WordPress. J'aime apprendre et créer pour ensuite partager !

Coorganisateur des Meetups WordPress Rennes et fondateur de bweb.
Partager cet article

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Afficher les 2 commentaires

2 commentaires