我正在使用Wordpress 3.9.2、MySQL 5.1.73和;PHP 5.3.27整合了一个基于历史的网站。
正如其他地方的文献(包括多年来StackExchange和WP论坛上的许多问题)所述,由于PHP的限制,不能发布日期超出32位有符号整数的最小值和最大值的帖子。由于我在64位系统上运行,我进一步研究了这个问题,发现this useful research elsewhere on StackExchange.
通过使用这些信息,我能够用很少的代码构建一个解决方案,以克服基本上归结为PHP限制的问题w/strtotime()
(但不是MySQL在1000-9999范围内的年限制)。我检查了以下位置,以确认日期是否正确处理:管理中的帖子创建/更新、前端和管理站点中帖子的日期、列表页面上帖子的排序以及RSS提要中的日期。
虽然我有多年的编程经验,但PHP和Wordpress并不是我的强项,所以我将此贴在这里,供有此专长的人使用我提出的解决方案解决2-3个问题。
找不到通过破解内核来实现此目的的方法不知道如何处理日期本地化(如下所示)我不确定我是否需要到处测试但我想到了一个解决方案:
(1) 替换wp includes/functions中的mysql2date。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)在wp admin/includes/meta框中编辑post\\u submit\\u meta\\u box()。php—将第175行替换为以下内容:
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
提前感谢您展示了实现这些修复的更好方法(或指出这些修复失败的地方)。
Update
我知道我知道不要破解核心。我想将这段代码作为补丁提交给Wordpress,因此我希望确保我的做法是正确的。非常感谢。