Hexo-theme-stellar首页隐藏文章
Stellar主题没有提供在首页隐藏文章的功能,但可以通过使用hexo-hide-posts
插件来实现。
0x01 安装并配置插件
请参考Hexo-hide-posts中文文档安装插件。
1 | npm install hexo-hide-posts |
完成安装后,按照文档进行配置。在配置完成后,修改hide_posts
中的以下两个选项:
1 | allowlist_generators: ['*'] |
这样配置后,插件将允许所有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 | archive_generator: |
0x03 创建隐藏文章列表
我原来使用 tags 标记隐藏文章,但是这样会造成 hexo-related-posts 的异常。
因此,建议创建一个hexo generator(生成器)来生成隐藏文章列表,可以使用index(首页)模板,也可以使用archives(归档)模板,或者自己手写一个新的。
在 /theme/hexo-theme-stellar/scripts/generators/ 目录下创建hidden.js文件,并添加以下代码:
1 | let config = hexo.config.hide_posts |
效果如本站 隐藏文章列表。
0x04 后记
本文只解决了一出由site.posts
引发的问题,实际上主题中还有非常多类似的地方,不过我用不到,请自行查找修改。
最终配置示例:
1 | hide_posts: |
在文章的 YAML Frontmatter 中写入hidden: true
即可隐藏文章。