fix: 优化 Mermaid 换行符处理 - PHP 端添加关键字后自动插入换行符 - 使用 data-mermaid-code 属性传递原始代码 - JS 端优先读取 data 属性 - 添加更详细的调试日志

This commit is contained in:
2026-01-23 19:21:05 +08:00
parent b7aac3633e
commit 3a4136acbf
2 changed files with 23 additions and 4 deletions

View File

@@ -3577,8 +3577,15 @@ function the_content_filter($content){
$code = html_entity_decode($code, ENT_QUOTES | ENT_HTML5, 'UTF-8');
// 去除首尾空白
$code = trim($code);
// 返回带换行符的代码块
return '<pre><code class="language-mermaid">' . htmlspecialchars($code, ENT_QUOTES, 'UTF-8') . '</code></pre>';
// 如果没有换行符尝试恢复WordPress 可能把换行符转换成了空格)
// 检测常见的 Mermaid 关键字后应该有换行
$keywords = ['flowchart', 'graph', 'sequenceDiagram', 'classDiagram', 'stateDiagram', 'erDiagram', 'journey', 'gantt', 'pie'];
foreach ($keywords as $keyword) {
// 匹配关键字后跟方向TD/LR等或其他内容但没有换行符的情况
$code = preg_replace('/(' . preg_quote($keyword, '/') . '\s+(?:TD|LR|RL|BT|TB))\s+(?![\r\n])/', "$1\n", $code);
}
// 返回带换行符的代码块,使用 data 属性存储原始代码
return '<pre><code class="language-mermaid" data-mermaid-code="' . esc_attr($code) . '">' . esc_html($code) . '</code></pre>';
},
$content
);