短代码输出的表格上下各多出两个空的 p 标签,段落间距一下被撑开三倍,查看源码能看到 <p></p> 夹在 table 外侧。编辑器切回文本模式,里面却什么都没有。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

add_filter("the_content", "abc_shortcode", 10);
// 不要写成 9,否则 wpautop 会在短代码之后执行
$html = preg_replace("/\n{2,}/", "\n", $html);

短代码回调挂了比段落处理更高的优先级,输出先展开,换行随后被补成段落标签。表格前后的空行就这样变成空段落,样式表里的间距全部失效。这一点先确认清楚,后面就不用反复试。

碰到「短代码空段落」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,把短代码回调的优先级改回默认值 让段落处理先跑;输出前把连续换行压成一个 别把排版空白带出去;确实要保留的整块 HTML 单独关掉段落过滤。

改完照着核一遍,页面源码里短代码块前后不再有空 p,表格间距回到样式表设定的值。

作者 9823189