Lesezeit für einen Beitrag ermitteln

Besucher einer Webseite haben oft keine Zeit und wollen wissen, wie lange sie sich jetzt mit einem Thema auseinander setzen müssen. Dazu haben mittlerweile viele Seiten die Anzeige einer voraussichtlichen Lesezeit bzw. Lesedauer integriert. Diese Webseite hier bringt das jetzt auch mit sich und ich wollte für alle Interessierten schnell den Code dazu posten.

Im Grunde genommen ist die Ermittlung der Lesezeit eine einfache Dreisatzrechnung mit der Anzahl der Wörter des Beitrags und einem angenommenen Wert für die Lesegeschwindigkeit des Besuchers.

Die durchschnittliche Lesegeschwindigkeit eines Benutzers findet sich in der Wikipedia mit 200 bis 240 Wörtern pro Minute angegeben. Das variiert natürlich abhängig von der Komplexität der Texte, ob viele lange oder kurze Wörter verwendet werden etc. pp. Aber da es hier ja explizit um eine einfache und schnelle Ermittlung der voraussichtlichen Lesezeit gehen soll, lassen wir das alles außen vor.

Am Beispiel von WordPress fügt man der functions.php eine kleine Funktion hinzu:

function flomei_reading_time($post_id) {
	$thepost = get_post( $post_id );
	$content = $thepost->post_content;
	$word_count = str_word_count( $content, 0 );
	
	$words_per_minute = 230;
	
	$time = ceil( $word_count / $words_per_minute );
	return $time;
}

Diese Funktion erwartet die Übergabe einer Post ID, bezieht sich dann den Inhalt des Posts, zählt die Wörter und teilt diese durch die angenommene Lesegeschwindigkeit die in $words_per_minute angegeben ist. Das Ergebnis wird mittels ceil() dann aufgerundet, um einen Wert in vollen Minuten zu erhalten. Auf Spielereien wie sekundengenaue Angaben verzichte ich.

Die Integration ins Theme kann dann zum Beispiel wie folgt geschehen:

$lesezeit = flomei_reading_time(get_the_ID());		
switch ( $lesezeit ) {
	case 1: echo '<br />Ca. 1 Minute Lesedauer<br />'; break;
	default: echo '<br />Ca. ' . $lesezeit . ' Minuten Lesedauer<br />'; break;
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.