
Post teller (1 van 8) in je sidebar, single of andere template bestanden
De Functie
Plak de volgende code in je functions.php
function tsd_post_number($id = null)
{
global $post;
// Als het psot ID niet wordt meegegeven in de functie
// dan kijken we naar de huidige post
if (is_null($id)) {
$id = $post->ID;
}
// Neem de categorie van de post
$cat = get_the_category($id);
// Geen categorie? Stuur dan "1 van 1" terug.
if (count($cat) === 0) {
return array(1, 1, false, false);
}
// Zoek naar alle berichten in de categorie
$posts = get_posts(array(
'cat' => $cat[0]->cat_ID,
'numberposts' => -1,
'orderby' => 'ID',
'order' => 'ASC',
));
// Standaard index is altijd 1
$index = 1;
// Sla het totaal op in een variabele
$total = count($posts);
// Standaard is er geen vorig bericht
$prev = false;
// Start een loop over alle berichten
foreach ($posts as &$p) {
// Stop direct wanneer
// het ID gelijk of hoger is dan het huidige ID
// Zo bepalen we dat de index niet verder opgeteld wordt
// En dat het vorige bericht keurig wordt toegekend aan $prev
if ($p->ID >= $id) {
break;
}
// Zolang we het huidige bericht nog niet hebben bereikt
// Blijven we de index optellen
// We starten met tellen bij 1 ipv standaard 0
// Ondanks dat we het huidige bericht nog niet hebben bereikt
// in de loop zal de index wel kloppen
// het volgende bericht is immers het huidige bericht
++$index;
// Het vorige bericht wordt in iedere iteratie gelijk gezet
// aan het ID dat we nu tegen komen in de iteratie
// Dit is altijd gelijk aan het vorige bericht
// want als we het huidige bericht tegenkomen
// wordt de loop gestopt door de "break;"
$prev = $p->ID;
}
// Door bovenstaande loop te stoppen bij het huidige bericht
// Staat de inner pointer op het huidige bericht
// Met next() zetten we de inner pointer 1 verder
// Dat is dus het volgende bericht
// Of "flase" dan zitten we nu op het laatste bericht
$next = next($posts);
if ($next !== false) {
$next = $next->ID;
}
// Stuur de resultaten terug als array, dat is makkelijk in gebruik
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;