0

在构建新主题时,我发现 WordPress<samp></samp><p></p>. 根据规范,<samp>代表程序或计算系统的(样本)输出。它不是块级元素,它可以内联使用,以及<kbd>,<var><code>.

问题是 WordPress 用段落包装了这个标签。我设法用这段代码解决了这个问题:

function righter_filter_ptags($content) {
    $content = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
    $content = preg_replace('/<p>\s*(<iframe .*>*.<\/iframe>)\s*<\/p>/iU', '\1', $content);
    $content = preg_replace('/<p>\s*(<samp .*>*.<\/samp>)\s*<\/p>/iU', '\1', $content);
    return $content;
}
add_filter('the_content', 'righter_filter_ptags');

它实际上也从图像和 iframe 中去除了 Ps。虽然它给出了预期的结果 - all<img>和标签现在没有包装段落,但 WordPress 现在添加了<iframe>标签before 。我正在“文本”模式下工作,并将所有内容写在一行中,没有换行符。这是示例代码:<samp><br><samp>

We have not only <code>code</code> tag, but also <kbd>kbd</kbd> and <samp>samp</samp> tags.

这是网站上 html 源代码的示例输出:

<p>
We have not only 
<code>code</code>
tag, but also 
<kbd>kbd</kbd>
and
<br>
<samp>samp</samp>
</p>
<p>
tags.
</p>

它看起来正是这样,所有换行符。一切都很好,除了这个<br>标签之前<samp>和之后的内容<samp>被包装到另一个段落中(单词'tags.')。任何想法如何删除它?谷歌搜索了很多,没有结果。

4

1 回答 1

0

好的,这是一个 TinyMCE 错误。不得不再花几个小时来弄清楚...

出于某种原因,TinyMCE 将<samp>标签定义为块级元素,这绝对是错误的。

这个错误有一个WordPress Trac 票 [18807]并且现在已经修复,似乎是随着 WordPress 3.6 更新推出的。暂时修补我的 WP 资源并等待 3.6 更新。

于 2013-08-01T12:20:22.920 回答