WordPress发布的日期是1901年前吗?

时间:2019-09-03 作者:David Moody

我创建了一个wordpress博客,本地托管在Raspberry Pi 4 4GB上,使用500GB USB SSD。作为evernote的替代品,它的性能非常出色。然而,我确实有一个与帖子约会的问题。

我希望根据内容的原始发布日期(如已知),尽可能准确地为每篇文章标注日期。例如,一本1886年出版并以PDF格式在公共领域公开的书,我希望能够在1886年12月31日发布并注明日期。然而,Wordpress不允许在1901年之前约会。

是否有一种覆盖方式可以让我在任何时候都可以使用“古代”约会?

1 个回复
SO网友:Antti Koskinen

这对我来说是全新的,所以我做了一些研究。多么令人兴奋的问题啊

我看了一下WP如何在保存帖子时保存日期。WP运行过账日期至wp_checkdate(), 它使用PHP本机函数checkdate(). 根据PHP文档checkdate() 认为1到32767之间的任何一年都是有效的,所以1800年应该不是问题。

我在当地测试了储蓄行为,并创建了一个日期为1856-09-03的帖子。日期已正确保存到数据库中,但没有显示在仪表板或网站的公共视图上

那我看看(get_)the_date() 如果你在页面模板中使用它,它是有效的。如果我理解正确的话,它基本上将post\\u日期转换为unix时间戳,如这里所述,时间戳限制在1901-2038年,https://stackoverflow.com/questions/3985764/display-past-dates-before-the-year-1800. 幸运的是,同样的问题;A还有日期问题的解决方案-DateTime.

以下是如何将默认日期格式替换为DateTime 在里面(get_)the_date().

add_filter( \'get_the_date\', function($the_date, $d, $post){
  $date = new DateTime( $post->post_date );
  return $date->format(\'Y-m-d H:i:s\'); // change formatting as needed
}, 10, 3 );
使用该过滤器时,我得到1856-09-03显示在post循环内部the_date().

要获取帖子列表中显示的旧日期,可以执行以下操作:,

add_filter( \'manage_posts_columns\', function($columns){
  unset($columns[\'date\']); // remove default date column
  $columns[\'real_date\'] = __(\'Date\'); // replace with custom column
  return $columns;
});

add_action( \'manage_posts_custom_column\' , function( $column, $post_id ){
  if ( \'real_date\' === $column ) {
    global $post;
    $date = new DateTime( $post->post_date );
    echo $date->format(\'Y-m-d H:i:s\');
  }
}, 10, 2 );

add_filter( \'manage_edit-post_sortable_columns\', function($columns){
  unset($columns[\'date\']);
  $columns[\'real_date\'] = __(\'Date\'); // make custom date column sortable
  return $columns;
});
要更改post edit屏幕的Publish metabox上显示的发布日期,我认为唯一的选择是使用js/jquery,因为我没有注意到任何与之相关的过滤器。

EDIT

如果要使用在“常规设置”中设置的默认日期格式,可以使用get_option( \'date_format\' );. 这样,您就不需要将日期格式硬编码到上面的过滤器中,例如。\'Y-m-d H:i:s\'.