我有这样的HTML:
<main class='someClass'>
<!-- somecontent -->
</main>
更新帖子后,我看到:
<p> </p>
<main class='someClass'>
<p> </p>
<!-- somecontent -->
<p> </p>
</main>
<p> </p>
我该怎么办?这是什么? 我阅读了很多关于这个问题的帖子,但是,我想,我不理解只有一个:我必须插入所有规则吗?如
config.allowedContent = true;
config.extraAllowedContent = 'main';
是不是?因为我插入了 ckeditor.config.js ,我看不到任何变化。它继续插入我的HTML
<p> </p>
有人能帮助我吗?我会非常感激的。
答案 0 :(得分:1)
经过长时间的调查,我认为我找到了它。
采取的步骤:
首先,我检查了CKEditor是否支持HTML5标签,确实如此。所以它不应该剥离它们或改变它们。当您发布<main class="someClass">
被<p> </p>
包围时 - 如果main
被识别为内联元素而非块1,则可能会发生这种情况。我深入研究CKEDITOR.dtd
,结果发现main
存在且它是一个块元素。应该没问题。
要检查它是否是CKEditor问题或WordPress,我检查了写入数据库的内容以及CKEditor从中获取的内容。帖子/页面内容如下例所示(唯一的区别是新行字符 - 因为CKEditor格式化代码):
<main class="someClass">
<p>There should be only 2 paragraphs inside the</p>
<pre><main class="someClass"></main></pre>
<p>element.</p>
</main>
但返回编辑的代码是不同的
<p><main class="someClass"></p>
<p>There should be only 3 paragraphs inside the</p>
<pre><main class="someClass"></main></pre>
<p>element.</p>
<p></main></p>
<main class="someClass">
被<p></p>
包裹,然后CKEditor在块元素周围修复这些段落,结果就像你发布的那样:
<p> </p>
<main class='someClass'>
<p> </p>
在对WordPress核心进行简短调试后,我找到了添加这些段落的地方 - wpautop
内的formatting.php
函数
https://developer.wordpress.org/reference/functions/wpautop/
更准确地说,469 line描述了所有块元素:
$allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)';
并且没有main
元素。
所以你有一些选择:
或报告,创建补丁/拉取请求并等待修复,然后更新,没有任何风险;)