我正在尝试使用嵌套的短代码,但遇到了问题。
每次我尝试嵌套我创建的两个短代码时。。。
首先在函数中声明。php(内部):
function p_generic_shortcode( $atts , $content = null )
{
return \'<p class="pov generic">\' . do_shortcode($content) . \'</p>\';
}
add_shortcode( \'pov-generic\', \'p_generic_shortcode\' );
第二个在函数中声明。php(外部):
function f_girl_shortcode( $atts , $content = null )
{
return \'<p class="talk girl">\' . do_shortcode($content) . \'</p>\';
}
add_shortcode( \'talk-girl\', \'f_girl_shortcode\' );
当我在bbpress编辑器中输入以下代码时:
[talk-girl]TEXT[pov-generic]OTHER TEXT[/pov-generic][/talk-girl]
输出以下代码:
<p class="talk girl">TEXT</p>
<p class="pov generic">OTHER TEXT</p>
并不像我想象的那样:
<p class="talk girl">TEXT<p class="pov generic">OTHER TEXT</p></p>
最合适的回答,由SO网友:Mayeenul Islam 整理而成
使用Output buffering 为了获得最佳的短代码效果,尤其是在输出一些HTML时:
function f_girl_shortcode( $atts , $content = null )
{
ob_start(); ?>
<div class="talk girl"><?php echo do_shortcode($content); ?></div>
<?php
return ob_get_clean();
}
add_shortcode( \'talk-girl\', \'f_girl_shortcode\' );
以及
function p_generic_shortcode( $atts , $content = null )
{
ob_start(); ?>
<div class="pov generic"><?php echo do_shortcode($content); ?></div>
<?php
return ob_get_clean();
}
add_shortcode( \'pov-generic\', \'p_generic_shortcode\' );
编辑是的,块级元素不是问题,我发现问题是
<p>
仅标记。这个
<p>
标记不支持另一个
<p>
标记或其中的任何块级元素(
More here). 所以我用
<div>
标签。
我倾向于遵循的另一个好做法是:[talk-girl]
是父级[pov-generic]
是孩子。在这种情况下,我遵循一个简单的规则:没有父母的孩子-所以先声明父母,然后声明孩子-可能什么都不是,但在某些情况下,这是很多事情。我也更改了代码声明的位置。:)
参考号: