我正在开发一个基本插件,为列、按钮、面板等添加短代码。这里没有什么新鲜事。无论如何,我没有改变wpautop;我试着删除它并推迟它-没有变化。所使用的所有短代码的情况是,第一段没有包装在p标记中(p标记实际上直接出现在第一段之后,并且为空),但同一短代码中第一段之后的所有段落都包装在p标记中。我需要弄清楚为什么第一段没有包装好。
功能:
function vc_shortcode_panel($atts, $content = null) {
extract( shortcode_atts( array(
\'type\' => \'\'
), $atts) );
return \'<div class="panel \' . $type . \'">\' . do_shortcode( trim($content) ) . \'</div>\';
}
add_shortcode(\'panel\', \'vc_shortcode_panel\');
短代码:
[panel type=""]paragraph 1
paragraph 2[/panel]
输出如下所示:
<div class="panel">
paragraph 1
<p></p>
<p>paragraph 2</p>
</div>
我知道如果我在[面板]和第一段之间添加一个换行符,那么它会将第一段包装在一个p标记中。但是,短代码不需要换行符就可以正确格式化吗?我做错了什么?谁能告诉我为什么会这样?
SO网友:bosco
这实际上是the wpautop()
function\'的预期目的。抄本:
将文本中的双线分隔符更改为HTML段落(<p>
...</p>
).
请注意the example provided in the Codex 为此,显式使用以换行符开头的字符串:
<?php
$some_long_text = // Start Text
Some long text
that has many lines
and paragraphs in it.
// end text
echo wpautop($some_long_text);
?>
上述结果产生以下标记:
<p>Some long text<br/>
that has many lines</p>
<p>and paragraphs in it.</p>
此功能背后的原因是HTML标记中的双线分隔符被解释为通用空格,并在DOM中呈现为单线分隔符。为了正确显示双线分隔符,您必须插入
<br />
元素或使用默认的段落元素样式,这就是WordPress所做的。
因为示例的第一行不包含换行符、段落或<br />
添加元素,因为不需要保留换行符格式。
请参见wpautop()
function\'s source 为了准确实施。