the_date() / get_the_date() auf eine bestimmte Locale erzwingen
Die Wordpress-Funktionen the_date() und get_the_date() geben Datum / Zeit immer im Locale-Format zurück, das durch die Spracheinstellung der aktuellen Wordpress-Installation definiert ist.
Was, wenn du das Datum in einer bestimmten Locale benötigst, z.B. Englisch?
Das Setzen der Wordpress-Sprache auf die Ziel-Locale wird dies erfolgreich erreichen, aber auch die Sprache anderer Teile von Wordpress ändern und ist daher oft keine Option.
Falls du das nicht tun kannst und eine programmatische Lösung finden musst, ist dies mein Weg, um
<?php the_date('r', '', '', TRUE); ?>
auf eine bestimmte Locale zu erzwingen ("C" d.h. einfaches Englisch in diesem Fall)
<?php
setlocale(LC_TIME, "C"); // Set to target locale (in which you want the date to be formatted
echo strftime("%a, %d %b %Y %H:%M:%S %z", get_post_time('U', TRUE)); // Parse wordpress time and format it again
setlocale(LC_TIME, "de_DE"); // Set back to the original locale!
?>
Da the_date() setlocale()-Aufrufe ignoriert, verwenden wir PHP’s strftime() als Workaround.
Zuerst setzen wir die Ziel-Locale (die Locale, in der das Datum formatiert werden soll) mit setlocale(LC_TIME, "C");. Ersetze "C" durch deine Ziel-Locale! "C" ist eine gute Wahl, wenn du einfaches Englisch möchtest.
Dann erhalten wir das Beitrags-Datum & -Zeit (dasselbe Datum & dieselbe Zeit, das/die von the_date() & get_the_date() verwendet / zurückgegeben wird) mit get_post_time('U', TRUE);. "U" bedeutet als Unix-Timestamp zurückgeben. TRUE ist hier sehr wichtig, da es get_post_time() anweist, den Timestamp als UTC zurückzugeben. Wenn du hier nicht TRUE verwendest, werden deine Daten um mehrere Stunden verschoben sein (abhängig von deiner Zeitzone), falls sie nicht bereits UTC sind.
Danach führen wir strftime() aus, um den Timestamp zu formatieren. Du musst hier deine gewünschte Formatzeichenkette einfügen. In meinem Fall ist die Formatzeichenkette "%a, %d %b %Y %H:%M:%S %z", was ein RFC2822-Datum ist. Beachte, dass bei Verwendung dieser Methode die Zeitzone (%z) immer +0000 ist, da sie als UTC-Datum formatiert wird. Der Zeitzonen-Offset wird jedoch korrekt berücksichtigt.
Als letzten Schritt setzen wir die ursprüngliche Locale mit setlocale(LC_TIME, "de_DE"); zurück. Dies vermeidet die Beeinflussung anderer Funktionen, z.B. in anderen Plugins. Du musst hier die korrekte (ursprüngliche) Locale einfügen. In meinem Fall weiß ich, dass die korrekte Locale "de_DE" ist, aber in deinem Fall kann dies abweichen.