新行后添加的短代码输出

时间:2015-09-14 17:20:03

标签: wordpress shortcode

我试图创建一个短代码来为页面添加CSS样式属性。我在主题的functions.php。

中添加了以下代码
function add_style( $atts, $content = null ) {
    return '<style>' . $content . '</style>';
}
add_shortcode( 'style', 'add_style' );

在页面的编辑器中,我将其用作:

[style]
.image-main{
  border:5px solid lightblue;
}
[/style]

在呈现的页面上,它输出到:

<style>
<br />
.image-main{<br />
  border:5px solid lightblue;<br />
}<br />

</style>

如果我有多行内容,如何设置短代码以删除<br />

2 个答案:

答案 0 :(得分:10)

由于WordPress处理内容的默认顺序,因此插入了br标记 - 在处理短代码之前运行wpautop(将换行符转换为p或br标记的函数)。

解决方案:

更改wpautop的执行优先级,以便在处理镜头代码之后执行,而不是之前执行。在functions.php文件中添加:

remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12);

现在短代码块中不会添加额外的p或br标签。事实上,根本不会将换行符自动转换为p和/或br标签。因此,如果您希望合法换行符转换为p和br标签,则需要从短代码函数内部运行wpautop,例如:

function bio_shortcode($atts, $content = null) {
   $content = wpautop(trim($content));
   return '<div class="bio">' . $content . '</div>';
}
add_shortcode('bio', 'bio_shortcode');

答案 1 :(得分:1)

我发现问题的解决方案是使用"<br /r>"

替换删除str_replace();
function add_style( $atts, $content = null ) {
    $pure_content = str_replace("<br />","",$content);
    return '<style>' . $pure_content . '</style>';
}
add_shortcode( 'style', 'add_style' );