Code voorbeeld

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

Leestijd: 2 minuten (356) words
profile image

Rick de Jong

Strategie

August 22, 2012 07:05

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

Een handige berichtenloper voor WordPress

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.

De Functie

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.