0x1 为什么需要?
技术文档就像代码一样,需要不停的完善修改,显示最后修改时间能够很好的告诉读者大概是哪个版本有问题,如果文档长久没有更新了,但是被查阅到,那么就会给读者带来困惑。
0x2 可行性分析
wordpress有无最后更新时间这个无法确定,但我目前使用的wordpress+Kratos主题更新完文档后,能够在文档标题下看到创建时间,在文档末尾看到最后更新时间。这样也不够人性化,目前网上文章太多,大多数人都是打开搜索到的内容是否符合自己技术点,再查看更新时间,两者任一不符合就直接关闭了,所以更新时间放到文章结束下面的效果是很差的。
0x3 实操
把最后更新时间移到与发表时间位置一致,可以做如下修改:
进入后台->外观->主题文件编辑器,右侧选择当前的主题,下侧再选择文章页面(single.php),此时可以看到文章页面格式中包含了时间的获取,修改成下面代码即可
<?php
/**
* 文章内容
* @author Seaton Jiang <hi@seatonjiang.com>
* @license GPL-3.0 License
* @version 2022.05.27
*/
get_header();
$col_array = array(
'one_side' => 'col-lg-12',
'two_side' => 'col-lg-8'
);
?>
<div class="k-main <?php echo kratos_option('top_img_switch', true) ? 'banner' : 'color' ?>" style="background:<?php echo kratos_option('g_background', '#f5f5f5'); ?>">
<div class="container">
<div class="row">
<div class="<?php echo $col_array[kratos_option('g_article_widgets', 'two_side')] ?> details">
<?php if (have_posts()) : the_post();
update_post_caches($posts); ?>
<div class="article">
<?php if (!is_attachment()) { ?>
<div class="breadcrumb-box">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a class="text-dark" href="<?php echo home_url(); ?>"> <?php _e('首页', 'kratos'); ?></a>
</li>
<?php
$cat_id = get_the_category()[0]->term_id;
$if_parent = TRUE;
$breadcrumb = "";
while ($if_parent == TRUE) {
$cat_object = get_category($cat_id);
$cat = $cat_object->term_id;
$categoryURL = get_category_link($cat);
$name = $cat_object->name;
$cat_id = $cat_object->parent;
$add_link = '<li class="breadcrumb-item"> <a class="text-dark" href="' . $categoryURL . '">' . $name . '</a></li>';
$breadcrumb = substr_replace($breadcrumb, $add_link, 0, 0);
if ($cat_id == 0) {
$if_parent = FALSE;
}
}
echo $breadcrumb;
?>
<li class="breadcrumb-item active" aria-current="page"> <?php _e('正文', 'kratos'); ?></li>
</ol>
</div>
<?php } ?>
<div class="header">
<h1 class="title"><?php the_title(); ?></h1>
<div class="meta">
<span><?php _e('创建:', 'kratos'); ?><?php echo get_the_date(); ?></span>
<span><?php _e('更新:', 'kratos'); ?><?php the_modified_date(); ?></span>
<?php if (kratos_option('g_post_views', true)) { ?>
<span><?php echo get_post_views();
_e('点热度', 'kratos'); ?></span>
<?php }
if (kratos_option('g_post_loves', true)) { ?>
<span><?php if (get_post_meta($post->ID, 'love', true)) {
echo get_post_meta($post->ID, 'love', true);
} else {
echo '0';
}
_e('人点赞', 'kratos'); ?></span>
<?php }
if (kratos_option('g_post_comments', true)) { ?>
<span><?php comments_number('0', '1', '%');
_e('条评论', 'kratos'); ?></span>
<?php } ?>
<?php if (current_user_can('edit_posts')) {
echo '<span>';
edit_post_link(__('编辑文章', 'kratos'));
echo '</span>';
}; ?>
</div>
</div>
<div class="content" id="lightgallery">
<?php
if (!empty(kratos_option('single_ad_top_group'))) {
foreach (kratos_option('single_ad_top_group') as $group_item) {
if ($group_item['ad_switcher']) {
echo '<div style="margin-bottom:5px"><a href="' . $group_item['ad_url'] . '" target="_blank" rel="noreferrer"><img src="' . $group_item['ad_img'] . '"></a></div>';
}
}
}
the_content();
wp_link_pages(
array(
'before' => '<div class="paginations text-center">',
'after' => '',
'next_or_number' => 'next',
'previouspagelink' => __('<span>上一页</span>', 'kratos'),
'nextpagelink' => ''
)
);
wp_link_pages(
array(
'before' => '',
'after' => '',
'next_or_number' => 'number',
'link_before' => '<span>',
'link_after' => '</span>'
)
);
wp_link_pages(
array(
'before' => '',
'after' => '</div>',
'next_or_number' => 'next',
'previouspagelink' => '',
'nextpagelink' => __('<span>下一页</span>', 'kratos')
)
);
if (!empty(kratos_option('single_ad_bottom_group'))) {
foreach (kratos_option('single_ad_bottom_group') as $group_item) {
if ($group_item['ad_switcher']) {
echo '<div style="margin-bottom:5px"><a href="' . $group_item['ad_url'] . '" target="_blank" rel="noreferrer"><img src="' . $group_item['ad_img'] . '"></a></div>';
}
}
}
?>
</div>
<?php if (kratos_option('g_cc_fieldset')['g_cc_switch'] ?? false) {
$cc_array = array(
'one' => __('知识共享署名 4.0 国际许可协议', 'kratos'),
'two' => __('知识共享署名-非商业性使用 4.0 国际许可协议', 'kratos'),
'three' => __('知识共享署名-禁止演绎 4.0 国际许可协议', 'kratos'),
'four' => __('知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议', 'kratos'),
'five' => __('知识共享署名-相同方式共享 4.0 国际许可协议', 'kratos'),
'six' => __('知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议', 'kratos'),
);
echo '<div class="copyright"><span class="text-center">';
printf(__('本作品采用 %s 进行许可', 'kratos'), $cc_array[kratos_option('g_cc_fieldset')['g_cc']]);
echo '</span></div>';
} ?>
<div class="footer clearfix">
<div class="tags float-left">
<span><?php _e('标签:', 'kratos'); ?></span>
<?php if (get_the_tags()) {
the_tags('', ' ', '');
} else {
echo '<a>' . __('暂无', 'kratos') . '</a>';
} ?>
</div>
</div>
</div>
<?php endif; ?>
<?php require get_template_directory() . '/pages/page-toolbar.php'; ?>
<nav class="navigation post-navigation clearfix" role="navigation">
<?php
$prev_post = get_previous_post(TRUE);
if (!empty($prev_post)) {
echo '<div class="nav-previous clearfix"><a title="' . $prev_post->post_title . '" href="' . get_permalink($prev_post->ID) . '">' . __('< 上一篇', 'kratos') . '</a></div>';
}
$next_post = get_next_post(TRUE);
if (!empty($next_post)) {
echo '<div class="nav-next"><a title="' . $next_post->post_title . '" href="' . get_permalink($next_post->ID) . '">' . __('下一篇 >', 'kratos') . '</a></div>';
} ?>
</nav>
<?php comments_template(); ?>
</div>
<?php if (kratos_option('g_article_widgets', 'two_side') == 'two_side') { ?>
<div class="col-lg-4 sidebar sticky-sidebar d-none d-lg-block">
<?php dynamic_sidebar('single_sidebar'); ?>
</div>
<?php } ?>
</div>
</div>
</div>
<?php get_footer(); ?>
0x4 更换了 Wing 主题
20230601更换了这个主题后,文档创建时间是相对的了,可以接受,但是又没有了最近更新时间。所以还是按照上面的办法加起来。还是在 外观->主题文件编辑器 找到了 Single.php ,但是这个文件内容比较少,里面写了 inc/article-content.php
<?php get_header();
require_once( "inc/article-content.php" );
if ( comments_open() || get_comments_number() ) :
comments_template();
endif;
get_footer(); ?>
于是我又在 inc 目录下找到了这个文件,它再一次指向了 inc/article-header.php,打开后内容如下:
<header class="article-header">
<h1 itemprop="name headline" class="article-title h2 mb-2"><?php the_title(); ?></h1>
<ul class="article-info d-flex text-gray reset-ul m-0">
<?php if ( get_the_author_meta( 'display_name' ) ) : ?>
<li>
<i class="czs-forum"></i>
<span><?php the_author_meta( 'display_name' ); ?></span>
</li>
<?php endif; ?>
<li>
<i class="czs-time"></i>
<time datetime="<?php the_time( 'c' ); ?>" itemprop="datePublished"
pubdate><?php the_time( 'Y-m-d' ); ?></time>
</li>
<li class="c-hand" onclick="onPraise()">
<i class="czs-heart"></i>
<span class="praise-<?php the_ID(); ?>"><?= get_praise() ?></span>
</li>
</ul>
<div class="divider"></div>
</header>
<script>
function onPraise() {
if ( $h.store.comments && $h.store.comments.$refs.affiliate ) {
$h.store.comments.$refs.affiliate.handlePraise();
} else {
$modules.actions.setPraise(<?php the_ID(); ?>);
}
}
</script>
可以看到 class="czs-time" 基本上就是时间,也与浏览器F12的元素中名字一致,但是这个主题与上一个主题的代码明显不太一样。经过一段尝试后有了大概的理解: class名使用的草莓图标,我们在这个网站下面找到喜欢的可以找到
https://chuangzaoshi.com/icon/
itemprop 作用不大,其他设置时间的参数感觉用处都不太大。所以我最终修改如下:
<li>
<i class="czs-time"></i>
<time datetime="<?php the_time( 'c' ); ?>" itemprop="datePublished"
pubdate><?php the_time( 'Y-m-d' ); ?></time>
</li>
<li>
<i class="czs-time-l"></i>
<time datetime="<?php the_modified_date('c'); ?>" itemprop="updatePublished"
pubdate><?php the_modified_date('Y-m-d'); ?></time>
</li>
获取更新时间的函数用的上一个主题的,图标找了个新得,其他不变。不过最终显示出来都是相对时间,就先这样用用吧
0x5 增加文章浏览数显示
在上面的代码下面增加:
<li>
<span ><?php the_views(); ?></span>
</li>
0x6 Wing日历时间
目前Wing的日历显示的天数是第一条笔记的相对时间。但有时候笔记对于我们的博客来说是占幅较少的部分,所以想修改为第一条文章的相对时间,那么应该如何修改呢?
我先通过F12找到了相关的请求,然后根据请求的参数搜索主题内的php脚本,找到了相关的脚本文件(但是不能肯定)
// 获取文章总数
$_posts = wp_count_posts( 'post' );
// 获取笔记总数
$_notes = wp_count_posts( 'note' );
// 最老一篇笔记
$last = get_posts( [
'post_type' => 'note',
'posts_per_rows' => 1,
'orderby' => 'date',
'order' => 'ASC',
] );
$days = 0;
if ( $last && count( $last ) ) {
$last_date = $last[0]->post_date;
// 判断两个日期相差的天数
$days = ceil( ( strtotime( date( 'Y-m-d' ) ) - strtotime( $last_date ) ) / 86400 );
}
$result = [
'notes' => $_notes->publish,
'posts' => $_posts->publish,
'days' => (string) max( $days, 1 ),
'calendar' => $calendar,
];
set_transient( 'heatmap', $result, DAY_IN_SECONDS );
看代码的话,这里返回的内容是跟请求里面返回的一样的,所以我修改 post_type 的值为 post,如下:
// 最老一篇笔记--> 修改为文章
$last = get_posts( [
'post_type' => 'post',
'posts_per_rows' => 1,
'orderby' => 'date',
'order' => 'ASC',
] );
刷新页面发现数据没有变化。在经过了一系列重新确认和测试后,发现修改这里是没问题的,只需要快速的发一条笔记刷新后就生效了。