Lesezeit in den Beitrag einfügen

Verweildauer im Blog erhöhen

Hinweis vom Donnerstag, 23.02.2017, 18:00:
Der Artikel wurde um die Möglichkeit der Ausgabe in der üblichen Zeitangabe ergänzt.

Der Artikel besteht aus 685 Wörtern. Geschätzte Lesezeit: 02:44 Minuten

Dieser Artikel ist 2 Monate und 9 Tage alt.
Die enthaltenen Informationen können daher eventuell nicht mehr aktuell sein.
Bitte nutze die Suchfunktion oder informiere dich gegebenenfalls auch an anderer Stelle.

Ein Rankingfaktor ist für google sicher auch die Verweildauer eines Besuchers auf einer Webseite.

Doch kein Besucher weiß, wenn er auf einen Artikel stößt, wie lang dieser ist und wieviel Zeit es möglicherweise kostet, ihn zu lesen. Manch einer überfliegt deshalb die Artikel nur und verschwindet wieder.

Ich habe bei der Suche nach einer Lösung, wie ich die Lesezeit im Artikel anzeigen lassen kann, gelesen, das, wenn die Dauer für das Lesen eines Artikels angegeben wird, man sich diesen für einen späteren Zeitpunkt aufhebt – sofern man aktuell nicht ausreichend Zeit zum lesen hat.

Um nun also die Dauer für das Lesen anzeigen zu lassen, bedarf es nur ein paar weniger Zeilen Code. Und der sieht wie folgt aus:

1
2
3
4
5
6
7
$mycontent=$post->post_content;
			  $word=str_word_count(strip_tags($mycontent));
			  $m=floor($word/250);
			  $s=floor($word%250/(250/60));
			  $est=$m.' Minute'.($m==0 || $m>1 ? 'n':'').', '.$s.' Sekunde'.($s==0 || $s>1 ? 'n' :'');
			  echo '<p class="lesezeit">Der Artikel besteht aus ' . $word .' Wörtern. Geschätzte Lesezeit: ' . $est .'</p>';
 }

Lesegeschwindigkeit individuell anpassbar

Original ist er im Blog von Fastwp.de. Dort allerdings noch ohne die Angabe der Wörterzahl und ohne die Mehrzahl-Funktion für Sekunde und Minute. Die findet man im g+-Plus-Auftritt des Blogs zielbar.

Wer die Anzahl der Wörter nicht anzeigen lassen will, lässt einfach den entsprechenden Satz im Code weg.

Doch was passiert hier nun?

Der Variablen mycontent wird in Zeile 1 der Inhalt der Variable post zugeordnet, die (grob gesagt) wiederum den Inhalt des Artikels darstellt.

In Zeile 2 erhält die word-Variable, die nachher für die Ausgabe der Wortanzahl zuständig ist den um php und HTML-Tags gekürzten Inhalt von mycontent.

Zeile 3 legt fest, das für die Lesegeschwindigkeit pro Minute ein Wert von 250 zugrunde gelegt wird. Die Zahl der Wörter wird durch diese Zahl geteilt und bei einem Ergebnis mit Dezimalstellen abgerundet.

Das gleiche passiert in Zeile 4 mit den Sekunden. Nur das hier word/250 durch das Ergebnis aus 250/60 geteilt wird.

Die Ausgabe von Einzahl oder Mehrzahl von Minute und Sekunde wird in Zeile 5 festgelegt. Die letzte Zeile gibt dann die entsprechenden Werte mit dem gewünschten Text aus.

Nun gibt es zwei Möglichkeiten, den Code im Theme unterzubringen.

Zum einen direkt so wie er ist, an der gewünschten Stelle in der (content-)single.php. Das allerdings hat den Nachteil, das, wird das Theme gewechselt, der Code auch weg ist.

Code direkt in die Datei oder für Toolbox anpassen

Ich habe die Zeilen in eine einzelne Datei gepackt und in den modules-Ordner der Toolbox gespeichert. Dafür muss ich in der single.php nur noch den Aufruf der Function einfügen. Das erfolgt mit

<?php if (function_exists('lesezeit')) { lesezeit(); } ?>

Allerdings braucht auch der Code in der Toolbox-Datei eine Ergänzung. Ohne diese werden im Frontend später nur 0-Werte angezeigt.

Die Ergänzung lautet:

global $post;

so das der Code in der Toolbox-Datei so ausschaut:

function lesezeit() {
		global $post;
		$mycontent=$post->post_content;
			  $word=str_word_count(strip_tags($mycontent));
			  $m=floor($word/250);
			  $s=floor($word%250/(250/60));
			  $est=$m.' Minute'.($m==0 || $m>1 ? 'n':'').', '.$s.' Sekunde'.($s==0 || $s>1 ? 'n' :'');
			  echo '<p class="hinweis">Der Artikel besteht aus ' . $word .' Wörtern. Geschätzte Lesezeit: ' . $est .'</p>';
}

Nun sind meine Artikel nicht so lang, das die Angabe unbedingt nötig wäre. Aber vielleicht ist sie ja doch für die Aufenthaltsdauer auf meinen Blogs von Nutzen.

Update: Da die Ausgabe x Minuten : x Sekunden ja nun wirklich nicht schön aussieht – zumindest für meinen Geschmack, habe ich mich auf die Suche gemacht, wie die übliche Zeitangabe ausgegeben werden kann.

Ersetzt man die Zeile $est durch

$est = $m . ':' . $s;

wird einfach x:x ausgegeben. Bei einer Lesezeit von Beispielsweise 69 Sekunden also 1:9. Das sieht absolut nach nichts aus, oder?

Darum muss die Zeile mit dem sprintf-Befehl ergänzt werden, so das sich – inklusive des gewünschten Ausgabetextes – folgende Zeile Code ergibt:

$est=sprintf("%02d:%02d",$m, $s). ' Minuten';

Damit erfolgt die Angabe für das Beispiel in der gewünschten Form: 01:09 Minuten.

Über Marcus 690 Artikel
Ich freue mich über Deinen Besuch auf meinem Blog! Wenn Dir der Artikel gefallen hat, teile ihn doch mit anderen und hinterlasse Deine Meinung. Mehr über mich gibt es hier zu lesen

Hinterlasse jetzt einen Kommentar

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*


CommentLuv - verlinke einen deiner Blog-Artikel