Portfolio-Einträge mit fortlaufender Nummerierung


Frage: Auf meiner Website habe ich zur Darstellung eines Portfolios einen Custom Post Type eingerichtet. Nun möchte ich gerne in der Einzelansicht zu jedem Portfolio-Eintrag eine fortlaufende Nummer anzeigen. Die Nummerierung soll automatisch angepasst werden, wenn ich mich entscheide, einen Portfolio-Eintrag zu löschen. Geht das?

WordPress speichert alle möglichen Inhalte als Post ab, unabhängig davon, um welche Inhaltsart es sich handelt. Dadurch werden in der Datenbanktabelle wp_posts automatisch Seiten und Beiträgen, benutzerdefinierten Beitragsarten, Revisionen, Anhängen (Attachments) und Menüs fortlaufend IDs zugeordnet; die IDs für die Beitragsart Portfolio sind also mit einiger Wahrscheinlichkeit nicht fortlaufend.

Um eine fortlaufende Nummrierung zu erhalten, wird im Template single.php bei Anzeige eines Portfolio-Eintrags zunäst eine neue Abfrage aller Portfolio-Beiträge vorgenommen.

Die Argumente für die Abfrage geben an, dass nur

  • Beiträge der Beitragsart Portfolio,
  • nur veröffentlichte Beiträge,
  • beliebige viele Beiträge,
  • von diesen Beiträgen nur die IDs und
  • die Reihenfolge aufsteigend nach dem Datum der Erfassung

abgerufen werden sollen. Das Ergebnis ist ein Array mit den IDs aller Portfolio-Einträge in der gewünschten Reihenfolge.

<?php
if ( 'portfolio' == get_post_type() ) {
	$args = array(
		'post_type' => 'portfolio',
		'post_status' => 'publish',
		'posts_per_page' => -1,
		'fields' => 'ids',
		'order' => 'ASC',
	);
	$the_query = get_posts( $args );

Anschließend werden die IDs in diesem Array mit der ID des aktuell angezeigten Portfolio-Eintrags abgeglichen und die Position der ID im Array ausgelesen. (Die ID aus der Anzeige des aktuellen Portfolio-Eintrags wird vor der Abfrage, der Vergleich dieser ID mit dem Array nach der Abfrage ausgelesen.)

// vor der Abfrage
$this_post_id = get_the_id(); 
// nach der Abfrage
$key = array_search( $this_post_id , $the_query );

Die Gesamtzahl aller Beiträge der Beitragsart Portfolio lässt sich mit der WordPress-Funktion wp_count_posts() auslesen, wobei wir auch hier zusätzlich angeben, dass nur veröffentlichte Beiträge gezählt werden sollen.

$published_posts = wp_count_posts( 'portfolio' )->publish;

Nun können die ermittelten Daten noch ausgegeben werden:

echo 'Nummer ' . $key . ' von '. $published_posts;
}//end if post type ?>

Die Ausgabe erfolgt jetzt in der Form Nummer 17 von 42.

Hier nochmal der gesamte Code:

<?php
if ( 'portfolio' == get_post_type() ) {
	$this_post_id = get_the_id();

	$args = array(
		'post_type' => 'portfolio',
		'post_status' => 'publish',
		'posts_per_page' => -1,
		'fields' => 'ids',
		'order' => 'ASC',
	);
	$the_query = get_posts( $args );

	$key = array_search( $this_post_id , $the_query );
	$key++;

	$published_posts = wp_count_posts( 'portfolio' )->publish;

	echo 'Nummer ' . $key . ' von '. $published_posts;
}	//end if post type ?>