在构建新主题时,我发现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。')之外,一切都很好。任何想法如何删除它?做了大量的谷歌搜索,没有结果。
答案 0 :(得分:0)
好的,这是一个TinyMCE错误。不得不花费更多的时间来弄明白......
出于某种原因,TinyMCE将<samp>
标记定义为块级元素,这绝对是错误的。
此错误有一个WordPress Trac ticket [18807],现在已修复,似乎已推出WordPress 3.6更新。暂时修补我的WP源并等待3.6更新。