Relative Zeitangaben in Wordpress

Aktualisierung: Damit das alles mehr Sinn macht, habe ich noch ein "über" in das erste if eingebaut.

Kleine Bastelei in der Mittagspause: Über den Kommentaren wird jetzt nicht mehr das Datum des Kommentars angezeigt, sondern wie lange er schon dort steht. Das finde ich sehr viel hübscher als die normale Zeitangabe.

Nur ein klein wenig musste ich rumsuchen, bis ich eine Lösung für Wordpress gefunden hatte. Im Ninedays Blog erklärt Terri Ann wie es geht und was der PHP-Code genau macht.

Da ich schon sehr viel Wert darauf lege das hier alles auf deutsch ist, übersetzte ich die wenigen Texte schnell. Außerdem habe ich das Skript so angepasst, dass es statt vor 1 Minute nun vor einer Minute ausgibt. Dazu habe ich in jede if-Abfrage noch ein weiteres "if" eingebaut, das die Zahl 1 durch einen Text ersetzt. Das sieht in meinen Augen besser aus. Den von mir verwendeten Code gibt es nach dem Klick.

Das ist nun der Code, der in die Datei functions.php des Themes muss:


<?php
if ( ! function_exists( 'how_long_ago' ) ) {
	function how_long_ago( $timestamp ) {
		$difference = time() - $timestamp;

		if ( $difference >= 60 * 60 * 24 * 365 ) {
			// if more than a year ago
			$int = intval( $difference / ( 60 * 60 * 24 * 365 ) );
			$s   = ( $int > 1 ) ? 'en' : '';

			if ( $int == 1 ) {
				$int = 'einem';
			};

			$r = "vor über " . $int . ' Jahr' . $s;

		} elseif ( $difference >= 60 * 60 * 24 * 7 * 5 ) {
			// if more than five weeks ago
			$int = intval( $difference / ( 60 * 60 * 24 * 30 ) );
			$s   = ( $int > 1 ) ? 'en' : '';

			if ( $int == 1 ) {
				$int = 'einem';
			};

			$r = "vor " . $int . ' Monat' . $s;

		} elseif ( $difference >= 60 * 60 * 24 * 7 ) {
			// if more than a week ago
			$int = intval( $difference / ( 60 * 60 * 24 * 7 ) );
			$s   = ( $int > 1 ) ? 'n' : '';

			if ( $int == 1 ) {
				$int = 'einer';
			};

			$r = "vor " . $int . ' Woche' . $s;

		} elseif ( $difference >= 60 * 60 * 24 ) {
			// if more than a day ago
			$int = intval( $difference / ( 60 * 60 * 24 ) );
			$s   = ( $int > 1 ) ? 'en' : '';

			if ( $int == 1 ) {
				$int = 'einem';
			};

			$r = "vor " . $int . ' Tag' . $s;

		} elseif ( $difference >= 60 * 60 ) {
			// if more than an hour ago
			$int = intval( $difference / ( 60 * 60 ) );
			$s   = ( $int > 1 ) ? 'n' : '';

			if ( $int == 1 ) {
				$int = 'einer';
			};

			$r = "vor " . $int . ' Stunde' . $s;

		} elseif ( $difference >= 60 ) {
			// if more than a minute ago
			$int = intval( $difference / ( 60 ) );
			$s   = ( $int > 1 ) ? 'n' : '';

			if ( $int == 1 ) {
				$int = 'einer';
			};

			$r = "vor " . $int . ' Minute' . $s;

		} else {
			// if less than a minute ago
			$r = 'gerade eben';
		}

		return $r;
	}
}

Wie folgt wird nun das relative Datum ausgegeben, der folgende Code ist natürlich schon auf meine Bedürfnisse angepasst.


<?php
if ( ! function_exists( 'how_long_ago' ) ) {
	' |' . comment_date();
} else {
	echo how_long_ago( get_comment_time( 'U' ) );
}

Neben der Funktion get_comment_time() kann so auch get_the_time() ersetzt werden. Vielleicht ist ja noch dem ein oder anderen damit geholfen. Bei mir klappt alles ganz super, Fragen dürfen gerne in die Kommentare.