这对我来说是全新的,所以我做了一些研究。多么令人兴奋的问题啊
我看了一下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\'
.