WordPress mit eigenen Funktionen erweitern
WordPress & Co

Das Datum eines WordPress Beitrags ein wenig menschlicher formatieren

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')); ?>
Hinterlasse eine Antwort

Deine eMail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit * markiert.