WordPress erlauben, Daten außerhalb von 1902-2038 zu akzeptieren

Ich verwende WordPress 3.9.2, MySQL 5.1.73 und PHP 5.3.27, um eine History-basierte Seite zusammenzustellen.

Wie an anderer Stelle gut dokumentiert (einschließlich vieler Fragen zu StackExchange & WP-Foren im Laufe der Jahre), kann man aufgrund der Einschränkungen von PHP keine Beiträge mit Daten außerhalb der Minimal- und Maximalwerte für eine 32-Bit-Ganzzahl mit Vorzeichen haben. Als ich auf einem 64-Bit-System lief, recherchierte ich das Problem weiter und fand diese nützliche Forschung an anderer Stelle auf StackExchange .

Mit diesen Informationen konnte ich eine Lösung mit überraschend wenig Code zusammenstellen, um eine PHP-Beschränkung mit strtotime() zu überwinden (aber nicht die MySQL-Beschränkung der Jahre im Bereich von 1000-9999). Ich überprüfte die folgenden Stellen, um zu bestätigen, dass das Datum richtig behandelt wurde: Post-Erstellung / Update im Admin, Datum auf dem Post in den Front-End- und Admin-Seiten, Sortierung von Posts auf Listen-Seiten und Datum in RSS-Feeds.

Obwohl ich jahrelange Programmiererfahrung habe, sind PHP und WordPress nicht meine Stärke, also poste ich dies für Leute mit dieser Expertise, um 2-3 Probleme mit meiner vorgeschlagenen Lösung zu lösen.

  • Konnte keinen Weg sehen, dies zu tun, ohne den core zu hacken.
  • Ich weiß nicht, wie ich mit der Datumslokalisierung umgehen soll (siehe unten).
  • Ich bin mir nicht sicher, ob ich überall getestet habe.

Aber hier ist die Lösung, die ich mir ausgedacht habe:

(1) Ersetze mysql2date in wp-includes / functions.php:

 function mysql2date( $format, $date, $translate = true ) { if ( empty( $date ) ) return false; if ( 'G' == $format ) try { $i = new DateTime($date . ' +0000'); return $i->format('G'); } catch (Exception $e) { // This doesn't appear to be WP's way of handling errors echo $e->getMessage(); exit(1); } try { $i = new DateTime($date); } catch (Exception $e) { echo $e->getMessage(); exit(1); } if ( 'U' == $format ) return $i->format('U'); if ( $translate ) return $i->format($format); // Not sure how to localize here (had date_i18n before) else return $i->format($format); } 

(2) Bearbeiten Sie post_submit_meta_box () in wp-admin / includes / meta-boxs.php – Ersetzen Sie die Zeile 175 durch die folgende:

  try { $date = new DateTime($post->post_date); } catch (Exception $e) { echo $e->getMessage(); exit(1); } $date = $date->format($datef); // Same issue as before -- this date should be localized 

Vielen Dank im Voraus, um einen besseren Weg zur Implementierung dieser Fixes zu zeigen (oder um aufzuzeigen, wo diese Fixes fehlschlagen).

Aktualisieren

Ich weiß, ich weiß, hack nicht den core. Ich möchte diesen Code als Patch für WordPress einreichen, daher möchte ich sicher sein, dass ich es richtig gemacht habe. Vielen Dank!

Solutions Collecting From Web of "WordPress erlauben, Daten außerhalb von 1902-2038 zu akzeptieren"

Es ist nicht empfehlenswert, den core zu hacken, da Sie Ihren Hack bei jeder Aktualisierung (und aus einer Reihe anderer Gründe) erneut anwenden müssen.

Das erste, was ich normalerweise tun würde, ist zu überprüfen, ob es einen Haken oder Filter gibt, mit dem Sie das Datum ändern können. Es scheint nicht, dass es einen gibt.

Die nächste Sache, die Sie überprüfen können, ist, ob die function, die Sie ändern möchten, in der Liste der Pluggable Functions (functionen, die WordPress überschreibt) – http://codex.wordpress.org/Pluggable_Functions – und diese function nicht zu sein scheinen.

Mein Vorschlag wäre also, ein benutzerdefiniertes Datumsfeld zu erstellen (das Advanced Custom Fields-Plugin funktioniert dafür hervorragend). Dann, wenn Sie nach Datum sortieren müssen, müssen Sie nur Ihre Abfrage nach dem benutzerdefinierten Meta-Feld statt dem Standard-Post-Datum-Feld zu sortieren.