发布于 

Hexo-theme-stellar首页隐藏文章

Stellar主题没有提供在首页隐藏文章的功能,但可以通过使用hexo-hide-posts插件来实现。

0x01 安装并配置插件

请参考Hexo-hide-posts中文文档安装插件。

1
npm install hexo-hide-posts

完成安装后,按照文档进行配置。在配置完成后,修改hide_posts中的以下两个选项:

1
2
allowlist_generators: ['*']
blocklist_generators: ['index']

这样配置后,插件将允许所有generator访问隐藏文章,但不允许index generator(首页)访问隐藏文章。

0x02 解决问题

这样操作下来,会发现归档页面中不含隐藏的文章,我们需要修改主题——

问题的原因

hexo.locals.posts(模板渲染时叫site.posts)中的隐藏文章已经被插件移除掉了。而主题的归档模板为了无视分页使用了site.posts而不是page.posts

第一步:

打开 /themes/hexo-theme-stellar/layouts/archive.ejs 文件,将第14行和第23行的site.posts改为page.posts,如图所示。

修改
修改
推荐

建议Fork一份主题,作为 Git Submodules 使用,这样可以在修改的同时保持原主题更新。

第二步:

page.posts获取的是经过index_generator分页处理后的文章列表,不完整,因此需要禁用分页。

在_config.yml文件中找到或添加以下配置:

1
2
3
archive_generator:
enabled: true
per_page: 0 # 无分页,输出全部文章

0x03 创建隐藏文章列表

我原来使用 tags 标记隐藏文章,但是这样会造成 hexo-related-posts 的异常。

因此,建议创建一个hexo generator(生成器)来生成隐藏文章列表,可以使用index(首页)模板,也可以使用archives(归档)模板,或者自己手写一个新的。

在 /theme/hexo-theme-stellar/scripts/generators/ 目录下创建hidden.js文件,并添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
let config = hexo.config.hide_posts
if (config != undefined && config.enable) {
hexo.extend.generator.register('hidden_page', function (locals) {
locals.posts = locals.hidden_posts.sort('date', -1)
return {
path: 'hidden/index.html', // 自定路由,我选择的是 /hidden/
data: locals,
layout: ['index']
}
});
} else hexo.log.warn("Please install or activate hexo-hide-posts");

效果如本站 隐藏文章列表

0x04 后记

本文只解决了一出由site.posts引发的问题,实际上主题中还有非常多类似的地方,不过我用不到,请自行查找修改。

最终配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
hide_posts:
enable: true
filter: hidden
blocklist_generators: ['index']
allowlist_generators: ['*']
noindex: false

archive_generator:
enabled: true
per_page: 0
yearly: true
monthly: true
daily: false
order_by: -date

在文章的 YAML Frontmatter 中写入hidden: true即可隐藏文章。


萌ICP备20230398号 | Build by @ciics | Powered by Hexo Stellar
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议,转载请注明出处。

本”页面“访问 次 | 👀总访问 次 | 🍖总访客

开往-友链接力