Files
argon-theme/docs/mermaid-shortcode-guide.md
nanhaoluo 32c2a72d2b feat: 添加 Mermaid Shortcode 支持(推荐方式)
- 新增 [mermaid]...[/mermaid] shortcode
- 支持 theme、width、height、align 参数
- 不依赖 WP-Markdown 的处理方式
- 不会被 WordPress 自动格式化破坏
- 在原生编辑器中清晰可见
- 添加完整的使用指南和示例
2026-01-24 21:02:47 +08:00

9.7 KiB
Raw Blame History

Mermaid Shortcode 使用指南

为什么使用 Shortcode

在 WP-Markdown 环境下,使用 Shortcode 是最可靠的 Mermaid 图表标记方式:

优点

  1. 不依赖 WP-Markdown 的处理方式

    • 不会被 WordPress 自动格式化破坏
    • 不会将 --> 转换为 >
    • 不会丢失换行符
  2. 在原生编辑器中清晰可见

    • 经典编辑器:文本模式下直接可见
    • Gutenberg 编辑器:使用"短代码"块
    • 易于编辑和维护
  3. 支持参数配置

    • 可以设置主题theme
    • 可以设置宽度width
    • 可以设置高度height
    • 可以设置对齐方式align
  4. 完全兼容

    • 与其他 Shortcode 一样使用
    • 不需要额外插件
    • 不需要修改 WP-Markdown

对比其他方式

方式 优点 缺点
Shortcode 可靠、易用、支持参数 需要记住语法
容器语法 ::: mermaid 符合 Markdown 规范 被 WP 格式化破坏
代码块 ```mermaid 通用 被代码高亮干扰
HTML <div class="mermaid"> 灵活 编辑不便

基本用法

语法

[mermaid]
flowchart TD
    A[开始] --> B[处理]
    B --> C[结束]
[/mermaid]

在经典编辑器中使用

  1. 切换到"文本"模式(不是"可视化"模式)
  2. 输入 Shortcode
    [mermaid]
    你的 Mermaid 代码
    [/mermaid]
    
  3. 保存并预览

在 Gutenberg 编辑器中使用

  1. 添加"短代码"块Shortcode Block
  2. 输入 Shortcode
    [mermaid]
    你的 Mermaid 代码
    [/mermaid]
    
  3. 保存并预览

参数说明

theme - 主题

设置图表主题,支持以下值:

  • default - 默认主题(浅色)
  • dark - 深色主题
  • forest - 森林主题
  • neutral - 中性主题

示例

[mermaid theme="dark"]
flowchart TD
    A --> B
[/mermaid]

width - 宽度

设置图表容器宽度,支持:

  • 百分比:100%, 80%, 50%
  • 像素值:800px, 600px
  • 自动:auto

示例

[mermaid width="80%"]
flowchart TD
    A --> B
[/mermaid]

height - 高度

设置图表容器高度,支持:

  • 像素值:600px, 400px
  • 自动:auto(默认)

示例

[mermaid height="500px"]
flowchart TD
    A --> B
[/mermaid]

align - 对齐方式

设置图表对齐方式,支持:

  • left - 左对齐
  • center - 居中(默认)
  • right - 右对齐

示例

[mermaid align="left"]
flowchart TD
    A --> B
[/mermaid]

组合使用

[mermaid theme="dark" width="80%" height="500px" align="center"]
flowchart TD
    A[开始] --> B[处理]
    B --> C[结束]
[/mermaid]

使用示例

示例 1: 简单流程图

[mermaid]
flowchart TD
    Start([开始]) --> Process[处理数据]
    Process --> Decision{是否成功?}
    Decision -->|是| Success[显示成功]
    Decision -->|否| Error[显示错误]
    Success --> End([结束])
    Error --> End
[/mermaid]

示例 2: 时序图

[mermaid]
sequenceDiagram
    participant User as 用户
    participant Server as 服务器
    participant DB as 数据库
    
    User->>Server: 发送请求
    Server->>DB: 查询数据
    DB-->>Server: 返回数据
    Server-->>User: 返回响应
[/mermaid]

示例 3: 类图

[mermaid]
classDiagram
    class Animal {
        +String name
        +int age
        +makeSound()
    }
    class Dog {
        +String breed
        +bark()
    }
    class Cat {
        +String color
        +meow()
    }
    Animal <|-- Dog
    Animal <|-- Cat
[/mermaid]

示例 4: 甘特图

[mermaid]
gantt
    title 项目进度
    dateFormat YYYY-MM-DD
    section 设计
    需求分析 :a1, 2024-01-01, 7d
    UI设计 :a2, after a1, 5d
    section 开发
    前端开发 :b1, after a2, 10d
    后端开发 :b2, after a2, 12d
    section 测试
    功能测试 :c1, after b1, 5d
    性能测试 :c2, after b2, 3d
[/mermaid]

示例 5: 状态图

[mermaid]
stateDiagram-v2
    [*] --> 待审核
    待审核 --> 已通过: 审核通过
    待审核 --> 已拒绝: 审核拒绝
    已通过 --> [*]
    已拒绝 --> [*]
[/mermaid]

示例 6: 饼图

[mermaid]
pie title 编程语言使用占比
    "JavaScript" : 386
    "Python" : 285
    "Java" : 215
    "C++" : 115
    "其他" : 85
[/mermaid]

示例 7: ER 图

[mermaid]
erDiagram
    USER ||--o{ ORDER : places
    ORDER ||--|{ ORDER_ITEM : contains
    PRODUCT ||--o{ ORDER_ITEM : "ordered in"
    
    USER {
        int id PK
        string name
        string email
    }
    ORDER {
        int id PK
        int user_id FK
        date created_at
    }
    PRODUCT {
        int id PK
        string name
        decimal price
    }
[/mermaid]

示例 8: 带样式的流程图

[mermaid]
flowchart TD
    Start([用户提交评论]) --> PreProcess[预处理]
    PreProcess --> CheckEnabled{启用 AI 检测?}
    CheckEnabled -->|是| AICheck[AI 检测]
    CheckEnabled -->|否| Save[保存评论]
    AICheck --> Result{检测结果?}
    Result -->|垃圾评论| Trash[移入回收站]
    Result -->|正常评论| Save
    
    style Start fill:#e1f5e1,stroke:#2e7d32,stroke-width:2px
    style Trash fill:#ff6b6b,stroke:#c62828,stroke-width:2px
    style Save fill:#95e1d3,stroke:#2e7d32,stroke-width:2px
[/mermaid]

常见问题

1. Shortcode 不生效怎么办?

可能原因

  • 主题未更新到最新版本
  • 使用了"可视化"模式编辑

解决方案

  1. 更新 Argon 主题到最新版本
  2. 切换到"文本"模式编辑
  3. 检查 Shortcode 语法是否正确

2. 图表渲染失败怎么办?

排查步骤

  1. 检查 Mermaid 语法

  2. 查看浏览器控制台

    • 按 F12 打开开发者工具
    • 查看 Console 标签页
    • 搜索错误信息
  3. 检查主题设置

    • WordPress 后台 → 外观 → Argon 主题选项
    • 找到"Mermaid 图表"分类
    • 确认"启用 Mermaid 支持"已开启

3. 如何迁移现有的容器语法?

如果你之前使用了 ::: mermaid ... ::: 语法,可以批量替换:

查找

::: mermaid

替换为

[mermaid]

查找

:::

替换为

[/mermaid]

4. 可以在评论中使用吗?

不可以。Shortcode 只能在文章和页面中使用,评论中不支持。

5. 可以嵌套使用吗?

不可以。Shortcode 不支持嵌套,每个图表需要独立的 [mermaid]...[/mermaid] 标签。


最佳实践

1. 使用有意义的节点 ID

推荐

[mermaid]
flowchart TD
    UserSubmit([用户提交]) --> Validate[验证数据]
    Validate --> Save[保存数据]
[/mermaid]

不推荐

[mermaid]
flowchart TD
    A --> B
    B --> C
[/mermaid]

2. 添加适当的注释

[mermaid]
flowchart TD
    %% 用户流程
    Start([开始]) --> Login[登录]
    
    %% 验证流程
    Login --> Check{验证成功?}
    Check -->|是| Dashboard[进入控制台]
    Check -->|否| Error[显示错误]
[/mermaid]

3. 使用样式定义

[mermaid]
flowchart TD
    Success[成功] --> End
    Error[错误] --> End
    
    style Success fill:#95e1d3,stroke:#2e7d32
    style Error fill:#ff6b6b,stroke:#c62828
[/mermaid]

4. 保持图表简洁

  • 避免过多的节点(建议 < 20 个)
  • 使用子图subgraph组织复杂流程
  • 考虑拆分为多个图表

5. 测试后再发布

  1. 先在 Mermaid Live Editor 中测试
  2. 确认语法正确后再粘贴到文章中
  3. 使用"预览"功能查看效果
  4. 确认无误后再发布

技术细节

Shortcode 实现

Argon 主题在 functions.php 中注册了 mermaid shortcode

add_shortcode('mermaid','shortcode_mermaid');
function shortcode_mermaid($attr,$content=""){
	// 预处理内容
	$content = shortcode_content_preprocess($attr, $content);
	
	// 获取参数
	$theme = isset( $attr['theme'] ) ? $attr['theme'] : 'default';
	$width = isset( $attr['width'] ) ? $attr['width'] : '100%';
	$height = isset( $attr['height'] ) ? $attr['height'] : 'auto';
	$align = isset( $attr['align'] ) ? $attr['align'] : 'center';
	
	// 生成 HTML
	$out = '<div class="mermaid-shortcode-container">';
	$out .= '<div class="mermaid-shortcode" ...>';
	$out .= esc_html($content);
	$out .= '</div></div>';
	
	return $out;
}

JavaScript 检测

argontheme.jsMermaid 渲染器会自动检测 div.mermaid-shortcode 元素:

const selectors = [
	'div.mermaid-shortcode',  // Shortcode 格式(推荐)
	'div.mermaid',            // 标准格式
	// ...
];

安全性

  • 使用 esc_html() 转义输出,防止 XSS 攻击
  • 使用 esc_attr() 转义属性值
  • 不执行任何用户提供的 JavaScript 代码

相关资源


更新日志

2026-01-24

  • 添加 Mermaid Shortcode 支持
  • 支持 theme、width、height、align 参数
  • 自动检测和渲染
  • 完整的使用文档和示例

总结

使用 Shortcode 是在 WP-Markdown 环境下最可靠的 Mermaid 图表标记方式:

  1. 简单易用[mermaid]...[/mermaid]
  2. 功能强大:支持主题、尺寸、对齐等参数
  3. 完全兼容:不需要额外插件或修改
  4. 易于维护:在编辑器中清晰可见

推荐所有用户使用 Shortcode 方式编写 Mermaid 图表!