防止WordPress用P和BR </samp>包装<samp>标签

时间:2013-08-01 10:00:04

标签: wordpress line-breaks

在构建新主题时,我发现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。虽然它提供了预期的结果 - 所有<img><iframe><samp>标记现在都没有包装段落,但WordPress现在会在<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。')之外,一切都很好。任何想法如何删除它?做了大量的谷歌搜索,没有结果。

1 个答案:

答案 0 :(得分:0)

好的,这是一个TinyMCE错误。不得不花费更多的时间来弄明白......

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

此错误有一个WordPress Trac ticket [18807],现在已修复,似乎已推出WordPress 3.6更新。暂时修补我的WP源并等待3.6更新。