Hexo 高级技巧:自定义页面与 Shortcode 实战
开篇:当博客不再只是“文章列表”
我的博客刚搭好时,除了首页和文章页,就只能干看着——连个“关于我”都没有,访客来了都得懵。🤔 这哪行?Hexo 的强大之处就在于:它是个框架,不是模板。你想加什么页面、什么功能,都能自己造。
这篇就来带你突破“写文章-发文章”的循环,玩点高级的:自定义页面、Shortcode、数据文件、自动化脚本……让你的博客真正“活”起来。
一、创建独立页面:关于我、友情链接、标签云
Hexo 默认只有首页、归档、分类、标签页。但你可能还想要:
- 关于我:自我介绍、经历、联系方式
- 友情链接:交换链接的朋友们
- 标签云:可视化展示所有标签
1.1 使用 hexo new page 快速生成
1 | # 在博客根目录执行 |
这会在 source/ 目录下创建三个文件夹,每个里面有 index.md。编辑它们:
1 | # source/about/index.md |
1.2 自定义 Generator(生成器)
默认情况下,Hexo 不会为自定义页面生成路由(比如 /tags-cloud 404)。你需要写一个 Generator:
创建 scripts/generator-tags-cloud.js(在博客根目录的 scripts/ 文件夹里):
1 | hexo.extend.generator.register('tags-cloud', function(locals) { |
然后创建对应的模板 themes/stellar/layout/tags-cloud.ejs:
1 | <% tags.forEach(function(tag) { %> |
最后在 source/tags-cloud/index.md 加个 type: tags-cloud 就行了。
success
二、Shortcode 入门:在 Markdown 里“编程”
Shortcode 是 Hexo 的“小工具箱”,让你在写文章时插入动态内容或样式组件。
2.1 内置 Shortcode 示例
1 | {{< quote "小白说" >}} |
2.2 自定义 Shortcode:{% note %} 和 {% tabs %}
我们博客常用两个组件:提示框(note)和标签页(tabs)。其实它们就是 Shortcode。
在 scripts/ 创建 shortcode-note.js:
1 | hexo.extend.tag.register('note', function(args, content){ |
对应 CSS 在 themes/stellar/source/css/_partial/custom.styl 里写:
1 | .note |
这样,你在 Markdown 里写:
1 | {% note success %} |
渲染出来就是带绿色左边框的提示框。
🐾 这里是折叠块(点击展开)
Shortcode 的 ends: true 表示它是成对标签({% name %}内容{% endname %}),单标签(如 {% img url %})设为 ends: false。别搞混了,我第一次写时就把 ends 设错了,结果标签没闭合,整篇文章排版全乱……
三、自定义文章布局:让首页更“好看”
默认首页就是文章列表,但我想加“精选文章”“最新评论”这些模块。可以使用 hexo-generator-index 插件(已安装在环境):
在 package.json 的 dependencies 里确保有:
1 | "hexo-generator-index": "^2.0.0" |
然后在根目录 _config.yml 配置:
1 | index_generator: |
接着覆盖主题的 layout/index.ejs(复制到 source/_data/ 或直接改主题文件),用 Nunjucks 语法写:
1 | <% page.posts.each(function(post) { %> |
四、数据文件:把配置“提取”出来
之前我的社交链接直接写在 _config.yml,每次改都要重启。现在用数据文件:
创建 _data/social.yml:
1 | github: https://github.com/HeiYingQWQ |
然后在模板里引用:
1 | <a href="<%= config.data.social.github %>" target="_blank">GitHub</a> |
这样改链接时只需动 _data/social.yml,不用碰主题配置文件。适合管理导航菜单、友情链接列表。
五、插件推荐与分析:给你的博客“加buff”
这几个插件我亲测有用:
| 插件 | 作用 | 安装命令 |
|---|---|---|
hexo-abbrlink |
生成短链接(/2026/04/12/abc123.html),避免中文路径 |
npm i hexo-abbrlink |
hexo-sitemap |
自动生成 sitemap.xml,SEO 必备 |
npm i hexo-sitemap |
hexo-baidu-submit |
主动推送到百度站长平台 | npm i hexo-baidu-submit |
hexo-generator-feed |
生成 RSS/Atom 订阅 | npm i hexo-generator-feed |
配置示例(根目录 _config.yml):
1 | abbrlink: |
warning
六、自动化脚本:一条命令搞定所有
把常用操作写在 package.json 的 scripts 里:
1 | { |
现在:
npm run pub→ 一键清理、生成、部署npm run post "文章标题"→ 自动创建新文章文件并打开编辑器(配合EDITOR=vim环境变量)
再来个“死链检查”脚本 scripts/check-links.js:
1 | const { load } = require('@jsdevtools/readdir-enhanced') |
每次生成后自动跑一遍,提醒你修复空链接。
结语
这些技巧不是“一次性设置”,而是可复用的模式。当你学会自定义页面、写 Shortcode、用数据文件、装插件、写脚本——你就从“Hexo 用户”变成了“Hexo 玩家”。🚀
下一篇,我们深入主题源码,改布局、加广告、做暗色模式。一起让博客独一无二吧!
2026-04-06 首发于 爪印博客