用于wordpress的CKEDITOR无法删除<p> </p>

时间:2016-05-10 10:28:22

标签: ckeditor ckeditor4.x

我有这样的HTML:

<main class='someClass'>
  <!-- somecontent -->
</main>

更新帖子后,我看到:

<p>&nbsp</p>
<main class='someClass'>
<p>&nbsp</p>

  <!-- somecontent -->

<p>&nbsp</p>
</main>
<p>&nbsp</p>

我该怎么办?这是什么? 我阅读了很多关于这个问题的帖子,但是,我想,我不理解只有一个:我必须插入所有规则吗?如

config.allowedContent = true;
config.extraAllowedContent = 'main';
是不是?因为我插入了 ckeditor.config.js ,我看不到任何变化。它继续插入我的HTML

<p>&nbsp</p>

有人能帮助我吗?我会非常感激的。

1 个答案:

答案 0 :(得分:1)

经过长时间的调查,我认为我找到了它。

采取的步骤:

首先,我检查了CKEditor是否支持HTML5标签,确实如此。所以它不应该剥离它们或改变它们。当您发布<main class="someClass"><p>&nbsp;</p>包围时 - 如果main被识别为内联元素而非块1,则可能会发生这种情况。我深入研究CKEDITOR.dtd,结果发现main存在且它是一个块元素。应该没问题。

要检查它是否是CKEditor问题或WordPress,我检查了写入数据库的内容以及CKEditor从中获取的内容。帖子/页面内容如下例所示(唯一的区别是新行字符 - 因为CKEditor格式化代码):

<main class="someClass">
    <p>There should be only 2 paragraphs inside the</p>
    <pre>&lt;main class=&quot;someClass&quot;&gt;&lt;/main&gt;</pre>
    <p>element.</p>
</main>

但返回编辑的代码是不同的

<p><main class="someClass"></p>
<p>There should be only 3 paragraphs inside the</p>
<pre>&lt;main class=&quot;someClass&quot;&gt;&lt;/main&gt;</pre>
<p>element.</p>
<p></main></p>

<main class="someClass"><p></p>包裹,然后CKEditor在块元素周围修复这些段落,结果就像你发布的那样:

<p>&nbsp</p>
<main class='someClass'>
<p>&nbsp</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元素。

所以你有一些选择:

  1. 根本禁用wpautop(不推荐)
  2. 编辑WordPress源并将此元素添加到列表中。然后在每次升级WordPress之后记住它。
  3. 或报告,创建补丁/拉取请求并等待修复,然后更新,没有任何风险;)