在构建新主题时,我发现 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.')。任何想法如何删除它?谷歌搜索了很多,没有结果。