Snippet: Post teller (1 van 8) in je sidebar, single of andere template bestanden

door in

Snippet: Post teller (1 van 8) in je sidebar, single of andere template bestanden

Ik kreeg laatst de vraag of het mogelijk was om in een sidebar een soort berichten-loper te maken. Via vorige / volgende (twee pijltjes) moest je door de berichten kunnen bladeren welke werden aangeduid met een thumbnail. Geen enkel probleem, maar de moeilijkheid zat 'm in het volgende.

Naast de afbeeldingen moest komen te staan "1 van 8". Bericht 1 is uiteraard het eerste bericht van de totaal 8. Uiteraard is het geheel dynamisch, dus bij nieuwe berichten werd dit 1 van 9, 10, 11 (of 2 van 8, 3 van 8).. etc. Een dergelijke code heb ik nergens kunnen vinden dus voor een ieder die met dezelfde vraag zit, bij deze de oplossing.

Code

Plak de volgende code in je functions.php


function tsd_post_number($id = NULL){
  global $post;
  if(is_null($id)){
	  $id = $post->ID;
  }
  
  $cat = get_the_category($id);
  if(count($cat) === 0){
	  return array(1, 1, FALSE, FALSE);
  }
  
  $posts = get_posts(array(
	  'cat' => $cat[0]->cat_ID,
	  'numberposts' => -1,
	  'orderby' => 'ID',
	  'order' => 'ASC',
  ));
  
  $prev = FALSE;
  
  $index = 1;
  $total = count($posts);
  foreach($posts as &$p){
	  if($p->ID >= $id){
		  break;
	  }
	  ++$index;
	  $prev = $p->ID;
  }
  
  $next = next($posts);
  if($next !== FALSE){
	  $next = $next->ID;
  }
  
  return array($index, $total, $prev, $next);
}

Om de functie in je thema bestand aan te roepen heb je de volgende code nodig (dit kan bijvoorbeeld net boven waar je de tel functie wilt tonen):


	list($index, $total, $prev, $prevnext) = tsd_post_number();

Vervolgens plak je de volgende code in je post (single.php) - Let op: je hebt dus beide codes nodig, zowel bovenstaande als deze hieronder.


	echo $index, 'van', $total;

In bovenstaande php functie is $index het nummer van $total het totaal aantal berichten.

 

Vind je dit bericht interessant?

Vind je dit bericht interessant? Dan zou ik het erg waarderen als je een like of andere "social-share" achter laat ;)