需更改文件的目录结构

shoka
tree .
.
├── _config.yml
├── languages
│    ├── en.yml
│    ├── ja.yml
│    ├── zh-CN.yml
│    ├── zh-HK.yml
│    └── zh-TW.yml
├── layout
│    └── _partials
│         └── layout.njk
├── scripts
│    └── generaters
│         └── script.js
└── source
     └── js
         └── _app
             ├── global.js
             └── pjax.js

添加到 source/js/_app/global.js 最后一行:

const isOutdated = function(){
  if (CONFIG.isOutdated.enable && LOCAL.isOutdated) {
    var times = document.getElementsByTagName('time');
    if (times.length === 0) { return; }
    var posts = document.getElementsByClassName('body md');
    if (posts.length === 0) { return; }
    var now = Date.now(); // 当前时间戳
    var pubTime = new Date(times[0].dateTime); // 文章发布时间戳
    if (times.length === 1) {
      var updateTime = pubTime; // 文章发布时间亦是最后更新时间
    } else {
      var updateTime = new Date(times[1].dateTime); // 文章最后更新时间戳
    }
    var interval = parseInt(now - updateTime); // 时间差
    var days = parseInt(CONFIG.outime.days) || 30; // 设置时效,默认硬编码 30 天
    // 最后一次更新时间超过 days 天(毫秒)
    if (interval > (days * 86400000)) {
      var publish = parseInt((now - pubTime) / 86400000);
      var updated = parseInt(interval / 86400000);
      var template = LOCAL.template.replace('{{publish}}', publish).replace('{{updated}}', updated);
      posts[0].insertAdjacentHTML('afterbegin', template);
    }
  }
}

添加到 source/js/_app/pjax.jssiteRefresh 函数的最后一行:

添加第 5 行
cardActive()
lazyload.observe()
isOutdated() // 判断文章时效性

添加到 scripts/generaters/script.jssiteConfig 变量中(具体哪一行没要求,加进去就行):

添加第 3 行
loader: theme.loader,
search : null,
isOutdated: theme.isOutdated,
valine: theme.valine,

添加到 layout/_partials/layout.njkLOCAL 变量中(我是加到 ignores 的上一行):

{%- if page.isOutdated === false %}
isOutdated: false,{%- else %}
isOutdated: true,template: "{{ __('isOutdated.template') }}",
{%- endif %}

国际化 i18n 设置,放到 YAML 文件最下面

en.yml
isOutdated:
  template: "<div class=\"note warning\"><p><span class=\"label warning\">Article Timeliness Alert</span><br>This is an article published {{publish}} days ago and last updated {{updated}} days ago. Some information may have changed, so please be careful to screen it.</p></div>"
ja.yml
isOutdated:
  template: "<div class=\"note warning\"><p><span class=\"label warning\">記事の適時性の警告</span><br> {{publish}} 日前に公開され、 {{updated}} 日前に最終更新された記事です。 一部情報が変更されている可能性がありますので、ご了承ください。</p></div>"
zh-CN.yml
isOutdated:
  template: "<div class=\"note warning\"><p><span class=\"label warning\">文章时效性提示</span><br>这是一篇发布于 {{publish}} 天前,最后一次更新在 {{updated}} 天前的文章,部分信息可能已经发生改变,请注意甄别。</p></div>"
zh-HK.yml
isOutdated:
  template: "<div class=\"note warning\"><p><span class=\"label warning\">文章時效性提示</span><br>這是一篇發佈於 {{publish}} 天前,最後一次更新在 {{updated}} 天前的文章,部分信息可能已經發生改變,請注意甄別。</p></div>"
zh-TW.yml
isOutdated:
  template: "<div class=\"note warning\"><p><span class=\"label warning\">文章時效性提示</span><br>這是一篇發佈於 {{publish}} 天前,最後一次更新在 {{updated}} 天前的文章,部分信息可能已經發生改變,請注意甄別。</p></div>"

然后可以通过主题配置文件 _config.shoka.yml 控制:

# 文章是否失效
isOutdated:
  enable: true
  days: 30 # 超过 30 天文章失效

对于单篇文章可以用 Front-matter 控制:

---
isOutdated: false  #关闭检查文章是否失效
---

效果:

文章时效性提示
这是一篇发布于 100 天前,最后一次更新在 30 天前的文章,部分信息可能已经发生改变,请注意甄别。