是否可以忽略来自短码的预格式化Div中的第一个换行符?

时间:2016-03-09 作者:Eddie

我创建了一个短代码[pncode] 这让我可以封装一些编程语法并应用一些样式。值得注意的是,它预处理文本并使其成为单空格(如果有帮助,请参阅下面的完整CSS)。

在wordpress编辑器中,我希望能够像这样封装语法:

[pncode]
some sample code
some sample code
some sample code
[/pncode]
但这会在开头插入一个“return”。我可以通过如下方式添加代码来解决此问题:

[pncode]some sample code
some sample code
some sample code
[/pncode]
但它看起来不那么整洁。

以下是上述任一示例的图片:

queston example

我的问题:Is there a way to ignore the first line-break after the [pncode] so I can enter the first code above in the visual editor and it look like the 2nd displayed code in the image.

我不确定您是否需要以下所有信息,但我会将其包括在内,以便全面了解:

下面是应用于任何封装在其中的CSS[pncode]

.pncode {
    background: #ddd;
    font-family: consolas, courier, monospace;
    white-space: pre;
    box-shadow: 3px 3px 3px #999;
    border-style: solid;
    border-width: 1px;
    border-color: #333;
    text-align: left;
    padding: 5px;
    line-height: 90%
    width: 98%;
    overflow: auto;
}
.pncode br {
    display: none;
}
它由CSS封装,添加到我的函数中。php:

function pncode_shortcode_function( $atts , $content = null ) {
    return \'<div class="pncode">\' . $content . \'</div>\';
}
add_shortcode( \'pncode\', \'pncode_shortcode_function\' );
EDIT: 为了添加更多细节,由于<BR>. 它的创建是因为[pncode], 它将由该短代码包围的文本设置为预格式化。

Wordpress在可视化编辑器中添加了大量BR,这就是为什么我的CSS中有这一部分:

.pncode br { display: none; }
它使得wordpress添加的BRs被忽略。

但是,我特别想消除的换行符是由于标记为预格式化文本的a“div”中的“enter”而添加的。

再说一遍,我甚至不知道这是否可能。我只是知道我不是专家,所以我想我应该在一个论坛上提问,在那里专家可以证实这一点,或者最好找到一个创造性的解决方案。

1 个回复
SO网友:birgire

你可以试着换掉多余的<br /> 在短代码内容的开头。

您可以通过多种方式实现这一目标,但这里有一个示例:

if( \'<br />\' === substr( ltrim( $content ), 0, 6 ) )
    $content = substr( ltrim( $content ), 6 );

return \'<div class="pncode">\' . $content . \'</div>\';
我们在哪里玩substr()ltrim() 功能。

更新:

感谢@userabuser的评论。

如果我们要删除br 标记,从短码字符串开始,我们可以尝试构造这种reg ex替换:

$content = preg_replace( \'#^\\s*(<br\\s*/?>\\s*)+#i\', \'\', $content );

Example:

短代码内容:

   <br />    <br>
<BR> <bR> 
some sample code <br />
some sample code <br />
some sample code <br />
将显示为:

some sample code <br />
some sample code <br />
some sample code <br />