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:
$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 '
Der Artikel besteht aus ‚ . $word .‘ Wörtern. Geschätzte Lesezeit: ‚ . $est .‘
‚; }
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
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 '
Der Artikel besteht aus ‚ . $word .‘ Wörtern. Geschätzte Lesezeit: ‚ . $est .‘
‚; }
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.
Super, mit der Anleitung bekomme ich das auch hin!
Hab das schon auf einigen WordPress Blogs gesehen und war mir immer unklar, wie dass umgesetzt wird.
Werde es gleich mal testen, danke Ihnen!
Grüße Dietrich
Danke für den Tipp konnte ich direkt verwenden.
Freut mich, das ich helfen konnte.
Anmerkung: Den Kommentar habe ich auf die wesentliche Aussage gekürzt, weil das hier keine Werbeplattform für den eigenen Blog ist.
Schreibe lieber sinnvolle und Aussagekräftige Kommentare zu den Artikeln. Ansonsten wirst Du mit Deiner Mail-Adresse irgendwann im Spam-Ordner der Blogs landen.
Die Webseiten-URL lasse ich jetzt stehen
Das funktioniert so klasse, vielen Dank dafür!
apropos, was ich gerade nach Abschicken des Kommentars sehe:
„hier klicken, um zu ändern – 4 Minuten und 27 Sekunden“
Was ist das für eine Funktion bitte, kann man das auch über die Toolbox realisieren?
Hallo Ina!
Die Funktion wird mit dem Plugin Simple Comment Editing realisiert.
Ich würde mir überlegen, ob man das Toolbox-Plugin weiterhin einsetze. Das Plugin ist aufgrund von Sergejs Ausstieg seit 2 Jahren nicht mehr aktualisiert worden. Es kann daher durchaus als Einfallstor für Schadcode genutzt werden.
Eine gute Alternative, wenn man die Funktionen nicht in die functions.php auslagern kann (kein FTP-Zugriff bsp.) oder möchte, ist das Plugin Code Snippets. Hier kann man die einzelnen Funktionen gezielt Aktivieren oder deaktivieren
Freut mich, wenn meine Tipps helfen.
danke Marcus! Ja, ich verwende schon seit Jahren https://de.wordpress.org/plugins/code-snippets/ dafür (letztes Update vor 3 Monaten), das dürfte das gleiche sein wie Sergejs Toolbox. Damit funktioniert dein Codeschnipsel oben auch perfekt. Ich hab es mir jetzt nur noch so angepasst, damit es direkt in die Zeile der Postmetadaten passt und da dann nur die Lesezeit ausspuckt, nicht die Wortzahl, sonst habe ich zuviel, ich sag mal „Kram“ unter dem Posttitel, bis endlich der eigentlich Content anfängt: https://screenshots.firefox.com/L4mQotT7MeVTLup1/www.evernote.com