短代码用一小段方括号标记,在正文里插入提示框、折叠内容或媒体播放器。Waxy 沿用了 WordPress Shortcode API 的语法和处理思路,把转换放到 Hexo 构建阶段;这不意味着所有短代码语法都由 WordPress 发明,也不意味着 WordPress 插件能直接在这里运行。

使用时,在站点的 _config.hexo-theme-waxy.yml 中开启 shortcode: true,再把下面的写法放进 Markdown 正文。每节先给出可复制的源码,再展示效果;代码块中的写法只供阅读,不会展开。常用标签独占一段并保留空行,复杂排版更容易检查。

支持的标签

info、warning、danger 分别用于补充说明、风险提醒和重要警告。开始与结束标签需要配对。

[info]这是一条一般提示,用于补充说明。[/info]

[warning]这是一条警告提示,用于提醒风险。[/warning]

[danger]这是一条危险提示,用于标注严重后果。[/danger]

效果:

info:这是一条一般提示,用于补充说明。
warning:这是一条警告提示,用于提醒风险。
Error:这是一条危险提示,用于标注严重后果。

文字样式

em 用于强调,hi 用于高亮,lo 用于弱化次要说明。

[em]警告样式的文字[/em]
[hi]高亮样式的文字[/hi]
[lo]备注样式的文字[/lo]

效果:

警告样式的文字
高亮样式的文字
备注样式的文字

收缩框

title 是折叠标题,默认收起;给出 checked="checked" 可默认展开。

[shrinks title="点开看看里面有什么"]收缩框适合放次要信息,默认收起,点击展开。[/shrinks]

[shrinks title="默认展开的说明" checked="checked"]这段内容默认可见,也能点击标题收起。[/shrinks]

效果:

点开看看里面有什么
收缩框适合放次要信息,默认收起,点击展开。
默认展开的说明
这段内容默认可见,也能点击标题收起。

提示框

style 支持 success、info、warning、danger;加上 close="close" 会显示关闭按钮。

[alert style="success" close="close"]带关闭按钮的成功提示。[/alert]

[alert style="info"]不带关闭按钮的信息提示。[/alert]

效果:

带关闭按钮的成功提示。
不带关闭按钮的信息提示。

代码里不会被误展开

如果想讲解短代码语法,把它放进 Markdown 的代码块中,读者就能原样阅读和复制:

[info]这段文字在代码块里,不应该被渲染成提示框[/info]

主题统一保护代码块、行内代码、HTML 注释,以及 pre、code、script、style、textarea 内部内容;HTML 标签及其属性也不会参与短代码匹配。Markdown 渲染前会暂存合法标签,避免带属性的短代码被当成链接语法。站点无需再添加另一份迁移适配脚本。

不想使用代码字体时,可以用双层方括号转义整个短代码:

[[info]这里只展示语法,不生成提示框。[/info]]

预期显示的文本(这里用行内代码标明):

[info]这里只展示语法,不生成提示框。[/info]

这种保护用于避免误替换,并不是 HTML 安全清洗。文章仍然允许原生 HTML;不要把不可信的脚本或 HTML 当成“写进短代码就安全了”。标签属性会做必要的 HTML 转义,但媒体地址仍应由作者确认。

嵌套与布尔属性

本站支持在收缩框中放提示内容,例如:

[shrinks title="查看操作前的提醒"]
[warning]先备份配置,再执行下面的操作。[/warning]
[/shrinks]
查看操作前的提醒
warning:先备份配置,再执行下面的操作。

嵌套与转义已统一到主题短代码引擎,最多进行 64 轮展开,防止错误内容无限循环。新增标签或复杂的多层嵌套,仍应检查构建结果,不应把这个上限理解为任意深度都能正确配对。

属性值通常是字符串。checked="false" 和 close="false" 都是非空字符串,当前实现仍会把它们当成开启。要恢复默认收起或去掉关闭按钮,直接删除 checked 或 close 属性,别用字符串 false 表示关闭。

勾选清单

把 [check] 或 [uncheck] 放在列表项开头,可展示只读的已完成或未完成状态。

- [check] 已经完成的一项
- [uncheck] 还没做的一项

效果:

  • 已经完成的一项
  • 还没做的一项

媒体

src 填音视频地址;视频可以用 poster 指定封面。站点文件可放在 source/media/ 中,再使用 /media/文件名 引用。下面引用的是本站本地示例,不依赖随机外部图片。

[audio src="/media/demo.mp3"]

[video src="/media/demo.mp4" poster="/media/demo.jpg"]

效果:

数据面板

本站统计

直接插入下面这一行,构建时会生成文章数、分类数、标签数、总字数与运行天数:

[blogstats]
213
文章
5
分类
63
标签
39.5 万
总字数
2529 天
已运行

本文数据

在需要的位置插入 [poststats],会生成当前文章的六项信息:字数、阅读时长、作者、分类、标签、时间。时间项将发布与更新日期合并展示;分类和标签可以显示多个名称。

[poststats]
3,601 字字数
约 11 分钟阅读时长
Dingzd作者
折腾、笔记分类
WordPress、Markdown、waxy标签
发布 2026-08-03更新 2026-10-27时间

这两组数据都是构建时的快照,重新生成站点后才会更新;它们不统计访问量,也不包含外接评论服务里的评论数。本文数据中的“阅读时长”是按字数估算,不能理解为读者已经阅读的时间。

从源稿到成品,以及排错顺序

本站先在 Markdown 渲染前保护短代码标记,再由 marked 与 Hexo 内置 Prism 生成正文 HTML;模板中的 waxy_content() 随后展开短代码,并处理原生图片加载属性和目录。提示框的结构已写入静态 HTML,折叠、关闭按钮和音视频播放才属于浏览器交互。改完文章后需要重新构建,静态服务器不会临时执行 Node 或 PHP。

如果看到方括号原样出现在正文里,先确认它是否本来就在代码块或转义示例中,再检查标签名、引号和配对的结束标签。标签应使用这里列出的英文名;不认识的标签不会自动变成组件。若结构已生成但无法折叠或关闭,检查主题脚本是否加载;若媒体不能播放,先打开 /media/ 下的实际文件地址,再核对格式与响应,别把所有问题都归到短代码解析。

排版基础可以接着看正文排版,媒体图片的交互边界见零依赖灯箱。迁移时还要分别验证普通正文、代码示例与 RSS,避免网页正常而订阅源仍残留未展开的活动标签。