Irgendwo habe ich einmal eine Routine zum Formatieren des Datums und der Zeit für einen WordPress Post gefunden. Leider habe ich keine Ahnung mehr wo, aber trotzdem will ich euch diesen Code-Schnipsel nicht vorenthalten. Ich hatte einfach die Idee, das Veröffentlichungsdatum von Posts ein wenig netter darzustellen. Da steht dann statt dem Datum gestern oder vorgestern. Und das macht es einfach netter. Dazu gibt es zwar eine passende Funktion in PHP, aber diese funktioniert für uns deutschsprachige Anwender leider nicht. Daher habe ich ein wenig in die Trickkiste gegriffen.
Ihr benötigt dazu eine neue Funktion in der Datei functions.php
des aktiven Templates. Falls diese Datei dort nicht existiert, legt sie einfach an. Aber vergesst dann nicht in der ersten Zeile <?php
und in der letzten Zeile ?>
einzufügen. Aber besser wäre es natürlich mit einem Child-Theme zu arbeiten. Denn dann bleiben alle Änderungen bei einem Update des Themes auch erhalten. Nun kommt die komplette Funktion, welche die Veröffentlichungszeit des Posts mit der aktuellen Zeit vergleicht und die passende Ausgabe zusammenstellt. Der Aufwand ist hier etwas größer, da wir in Deutsch die Mehrzahl und auch verschiedene Zeitangaben haben. Zusätzlich werden auch noch einstellige Zahlen durch die passenden Wörter ersetzt.
//Veroeffentlichungszeit formatieren function formatAgo($timestamp){ //Differenz in Sekunden ermitteln $diff = time() - $timestamp; //Zeitdifferenz hinzurechnen $diff += 7200; $zeit = ''; //Sekunden if ($diff < 60) $zeit = 'Sekunde'; else{ //Minuten $diff = round($diff / 60); if ($diff < 60) { $zeit = 'Minute'; } else { //Stunden $diff = round($diff / 60); if ($diff < 24) { $zeit = 'Stunde'; } else { //Tage $diff = round($diff / 24); if ($diff < 7) { if ($diff == 1) { $zeit = 'gestern'; } else if ($diff == 2) { $zeit = 'vorgester'; } else { $zeit = 'Tage'; } } else { //Wochen $diff = round($diff / 7); if ($diff == 1) { $zeit = 'letzte Woche'; } else { //Wenn mehr als eine Woche vorbei, //dann das Datum ausgeben $zeit = 'am '. date('j. n. Y \u\m \e\t\w\a G \U\h\r', $timestamp); } } } } } //Mehrzahl n hinzufuegen //nicht fuer Datum und Woche if ($diff != 1 && strpos($zeit, 'am ')===false && strpos($zeit, 'Woche')===false) { $zeit .= 'n'; } //einstellige Zahlen ersetzen //nicht fuer (vor)gestern und Datum if (strpos($zeit, 'gestern')===false && strpos($zeit, 'vorgestern')===false && strpos($zeit, 'am ')===false) { switch ($diff) { case 1: //Falls Woche, keine Ersetzung durchfuehren if (strpos($zeit, 'Woche')===false) { $retVal = 'einer '.$zeit; } else { $retVal = $zeit; } break; case 2: $retVal = 'zwei '.$zeit; break; case 3: $retVal = 'drei '.$zeit; break; case 4: $retVal = 'vier '.$zeit; break; case 5: $retVal = 'fünf '.$zeit; break; case 6: $retVal = 'sechs '.$zeit; break; case 7: $retVal = 'sieben '.$zeit; break; case 8: $retVal = 'acht '.$zeit; break; case 9: $retVal = 'neun '.$zeit; break; default: $retVal = $diff.' '.$zeit; break; } //Das Wort, ausser bei Woche, voranstellen if (strpos($zeit, 'Woche')===false) { $retVal = 'vor '.$retVal; } } else { $retVal = $zeit; } //Rueckgabe der formatierten Zeit return $retVal.' gepostet'; }
Nun musst Du nur mit die einzelnen Dateien deines Themas anpassen, in denen ein Veröffentlichungsdatum angezeigt wird. Dies sind normalerweise die Dateien single.php
und index.php
bzw. loop.php
oder auch content-....php
. Suche dort nach dem Befehl the_time()
und ersetze in durch folgende Zeile. Du musst aber auf die php-Tags (<?php
und ?>
) aufpassen. Diese darfst Du nicht ineinander verschachteln.
<?php echo ago(get_the_time('U')); ?>