之前修改了WordPress博客首页按更新日期排序,当点开文章看到发布日期是很久的,可能会让读者感到困惑,所以还是很有必要在标题下方加上更新日期,文章页和首页都要加。
一、文章页标题下方添加作者和更新时间
本来之前文章下方有打印按钮,觉得没什么用就删除了,看起来就很空,早就想加个作者名字,这次顺便一起加上。
进入主题目录,打开inc文件夹中的“inc.php”文件,begin主题是找到“begin_single_meta”这行,不同主题可能不同。
function begin_single_meta() {
echo '<div class="begin-single-meta">';
echo '<i class="be be-personoutline"></i> <a href="'. get_author_posts_url( get_the_author_meta('ID') ) .'">'. get_the_author() .'</a>'; // 作者信息
echo '<span class="my-date"><i class="be be-schedule"></i> ';
time_ago( $time_type ='posts' ); // 你的 time_ago 函数
$post_time = get_the_modified_time('U'); // 获取更新时间
$relative_time = human_time_diff($post_time, current_time('U')) . '前';
echo '<span class="my-date">更新于' . $relative_time . '</span>';
这样在文章标题下方加上作者名字和更新时间了,这个更新时间是相对的,不是具体的时间,格式是几“单位”前,如:几秒前、几分钟前、几小时前等,单位有:秒、分钟、小时、天、周、年等,与发布时间做明显区别。
文章底部的版权信息框则是相反,发布时间是相对的,更新时间是具体的。这个我在更换主题时就改好了。
二、首页文章列表添加图标和更新时间
首页的文章列表,之前标题下方只有发布日期和浏览器以及评论,也加一下时间图标和更新时间。
function begin_entry_meta() {
if ( ! is_single() ) {
// 显示文章时间
echo '<span class="date"><i class="be be-schedule"> </i>';
time_ago($time_type = 'post'); // 发布时间
// 获取文章发布和更新时间
$post_time = get_the_time('U');
$update_time = get_the_modified_time('U');
// 只有存在更新时间时才显示相对更新时间
if ($update_time > $post_time) {
$relative_time = human_time_diff($update_time, current_time('U')) . '前';
echo '<span class="my-date"> 更新于' . $relative_time . '</span>';
}
echo '</span>'; // 结束时间显示
这样改下,如果文章有更新,访客可以很直观的看到什么时候更新。
三、首页文章列表只显示月日
本想再写一篇文章的,补充到之前的文章,比较有衔接感。
首页的发布时间是某年某月某日,这个年份改成不显示是不是好一点,主要是考虑时间格式比较长,在电脑上看还好,在手机上看就太占屏幕了。另外比较早期的文章年份比较久,老文章也比较影响点击率。
这个时间显示格式还有个前导零的区别,比如1月2日,有前导零就是01月02日,无前导零就是1月2日。把原来的:
// 发布时间(原始格式)
time_ago($time_type = 'post');
直接替换为:
//有前导零
echo get_the_time('m月d日');
'md' 比较好了解,代表 "month day",表示日期和月份,通常带有前导零。这也是日期格式的一种缩写。
//无前导零
echo get_the_time('n月j日');
'nj' 不太好理解,代表 "no zero",表示日期和月份不带前导零。这是一种日期格式的缩写,是有历史的日期表示法。它可能源自于拉丁文或其他古老的日期表示方式。英文日期格式的制定中,采用了这个约定,表示月份中的日期。
上面两个写法均是硬解码的,还有一种写法适合本地化的,但如果不加“日”字,就变成“几月几”了:
//自动适应本地化
echo date_i18n('Fj日', get_the_time('U'));
这个 date_i18n
函数会根据网站的本地化设置自动适应不同语言和地区,其实没多大必要。
后面看到原始的 time_ago 函数是自定义的,在同文件下搜索,大概在795左右,可以直接修改函数,或者增加一个“noyear”无年份的选项,设置为无年份无前导零的格式:
function time_ago($time_type) {
if (zm_get_option('meta_time')) {
switch ($time_type) {
case 'comment': //评论时间
printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time());
break;
case 'post': //日志时间
echo get_the_date();
break;
case 'posts': //日志时间年
echo get_the_date();
echo '<i class="i-time">' . get_the_time('H:i:s') . '</i>';
break;
//上面不变,增加选项
case 'noyear': //无年份无前导零
echo the_time('n月j日');
break;
然后把之前的代码“post”选项改成“noyear”选项:
// 发布时间无年份无前导零
time_ago($time_type = 'noyear');
闹着玩下网的文章版权声明处,一直以来都是有前导零的写法,之前也不太注意这个问题。改完简洁了。这些前台页面都已经加了更新时间,那后台的文章列表也要加上更新时间。