将快捷代码括起来会创建换行符

时间:2016-02-26 作者:Torben

我创建了如下封闭短代码:

//[rezept]
function rezept_func( $atts, $content = null ){
    return \'<div class="drl-rezept-wrapper">\'.do_shortcode($content).\'</div>\';
}
add_shortcode( \'rezept\', \'rezept_func\' );

function rezept_zutaten_func( $atts, $content = null ){
    return \'<div class="drl-rezept-left">\'.$content.\'</div>\';
}
add_shortcode( \'rezept-zutaten\', \'rezept_zutaten_func\' );
HTML代码为:

[rezept]
[rezept-zutaten]
<span>Zutat 1</span>
<span>Zutat 2</span>
<span>Zutat 3</span>
[/rezept-zutaten]
[/rezept]
结果是以下html代码:

<div class="drl-rezept-wrapper"><br>
<div class="drl-rezept-left"><br>
<span>Zutat 1</span><br>
<span>Zutat 2</span><br>
<span>Zutat 3</span><br>
</div><br>
<br>
</div>
所有的<br>\'s 来自,我如何删除它们?

谢谢你的帮助!

2 个回复
最合适的回答,由SO网友:jgraup 整理而成

如果你想把<br /> 从内容中,您可以修改函数以将该签名替换为空字符串。这感觉像一个肮脏的黑客,但它对我有用。

值得注意的是,我的Chrome工具显示<br> 但实际代码正在呈现<br /> 这就是表达式要检查的内容。

//[rezept]
function rezept_func( $atts, $content = null ) {

    // remove \'<br />\'
    $no_br = preg_replace( "/(<br\\s\\/>)/", "", do_shortcode( $content ) );
    return \'<div class="drl-rezept-wrapper">\' . $no_br . \'</div>\';
}

add_shortcode( \'rezept\', \'rezept_func\' );

function rezept_zutaten_func( $atts, $content = null ) {

    // remove \'<br />\'
    $no_br = preg_replace( "/(<br\\s\\/>)/", "", $content );
    return \'<div class="drl-rezept-left">\' . $no_br . \'</div>\';
}

add_shortcode( \'rezept-zutaten\', \'rezept_zutaten_func\' );
发生这种情况的原因是wpautop 上的筛选器$content 在它到达您的短代码之前。实际上,您可以禁用所有额外的<br /><p> 通过添加标记:

remove_filter( \'the_content\', \'wpautop\' );
您可以启用p 没有br 通过注册我们自己的过滤器:

add_filter( \'the_content\', \'wpautop_no_br\' );

function wpautop_no_br ($content, $br){
    return wpautop($content, false);
}
虽然如果要禁用wpautop 那么你影响的不仅仅是你的短代码,这是不推荐的。要查看差异,请查看这些块的输出。

echo \'<pre>RAW</pre><pre>\'
     . get_post( get_the_ID() )->post_content
     . \'</pre>\';

echo \'<pre>Filtered</pre><pre>\'
     . wpautop( get_post( get_the_ID() )->post_content )
     . \'</pre>\';

echo \'<pre>Filtered - No BR</pre><pre>\'
     . wpautop( get_post( get_the_ID() )->post_content, false )
     . \'</pre>\';

SO网友:Sumit

<br /> 来自内容编辑器的标记。添加的换行符转换为<br /> 标签。

以这种方式使用您的短代码

[rezept][rezept-zutaten]<span>Zutat 1</span><span>Zutat 2</span><span>Zutat 3</span>[/rezept-zutaten][/rezept]
或者根据@jgraup建议,您可以使用strip_tags 仅允许某些标记。

function rezept_func( $atts, $content = null ){
    $content = strip_tags($content, \'<span><p>\');
    return \'<div class="drl-rezept-wrapper">\'.do_shortcode($content).\'</div>\';
}
add_shortcode( \'rezept\', \'rezept_func\' );
请记住,用户永远无法添加<br /> 内容中的标记。最好让用户了解WordPress convert line break in<br />.

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\