From 3a4136acbfb7680d75bb6ae601054a8e85669515 Mon Sep 17 00:00:00 2001 From: nanhaoluo <3075912108@qq.com> Date: Fri, 23 Jan 2026 19:21:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=20Mermaid=20=E6=8D=A2?= =?UTF-8?q?=E8=A1=8C=E7=AC=A6=E5=A4=84=E7=90=86=20-=20PHP=20=E7=AB=AF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=B3=E9=94=AE=E5=AD=97=E5=90=8E=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=8F=92=E5=85=A5=E6=8D=A2=E8=A1=8C=E7=AC=A6=20-=20?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20data-mermaid-code=20=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E4=BC=A0=E9=80=92=E5=8E=9F=E5=A7=8B=E4=BB=A3=E7=A0=81=20-=20JS?= =?UTF-8?q?=20=E7=AB=AF=E4=BC=98=E5=85=88=E8=AF=BB=E5=8F=96=20data=20?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=20-=20=E6=B7=BB=E5=8A=A0=E6=9B=B4=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E7=9A=84=E8=B0=83=E8=AF=95=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- footer.php | 16 ++++++++++++++-- functions.php | 11 +++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/footer.php b/footer.php index f6278b7..afdf9f3 100644 --- a/footer.php +++ b/footer.php @@ -235,9 +235,19 @@ let pre = element.parentElement; - // 获取代码内容,保留换行符 + // 优先从 data-mermaid-code 属性获取代码 - let code = getTextWithLineBreaks(element); + let code = element.getAttribute('data-mermaid-code'); + + + + // 如果没有 data 属性,尝试从内容获取 + + if (!code) { + + code = getTextWithLineBreaks(element); + + } // 去除首尾空白 @@ -277,6 +287,8 @@ console.log('Contains newlines:', code.indexOf('\n') !== -1); + console.log('First 200 chars:', code.substring(0, 200)); + // 创建 Mermaid 容器 let mermaidDiv = document.createElement('div'); diff --git a/functions.php b/functions.php index 6472556..1246934 100644 --- a/functions.php +++ b/functions.php @@ -3577,8 +3577,15 @@ function the_content_filter($content){ $code = html_entity_decode($code, ENT_QUOTES | ENT_HTML5, 'UTF-8'); // 去除首尾空白 $code = trim($code); - // 返回带换行符的代码块 - return '
' . htmlspecialchars($code, ENT_QUOTES, 'UTF-8') . '
'; + // 如果没有换行符,尝试恢复(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 '
' . esc_html($code) . '
'; }, $content );