WordPress文章标题下方添加作者和更新时间

nZone 2023年10月20日更新于4月前 共1353字 53行代码 预计7分钟 评论 53
阿里云折扣】服务器活动对比【腾讯云秒杀

之前修改了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'); 

闹着玩下网的文章版权声明处,一直以来都是有前导零的写法,之前也不太注意这个问题。改完简洁了。这些前台页面都已经加了更新时间,那后台的文章列表也要加上更新时间

weinxin
公众号
闹着玩下网
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: