嵌套快捷代码会导致内部快捷代码被放置在外部快捷代码之后

时间:2015-04-29 作者:Vico

我正在尝试使用嵌套的短代码,但遇到了问题。

每次我尝试嵌套我创建的两个短代码时。。。

首先在函数中声明。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>

1 个回复
最合适的回答,由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] 是孩子。在这种情况下,我遵循一个简单的规则:没有父母的孩子-所以先声明父母,然后声明孩子-可能什么都不是,但在某些情况下,这是很多事情。我也更改了代码声明的位置。:)

参考号:

结束

相关推荐

Multiple level shortcodes

我正在开发一个插件,遇到了一种情况,我希望有人能帮我找到一个解决方案。我想要一个短代码结构,如:[shortcode_1] [shortcode_2] [shortcode_3] [shortcode_4][/shortcode_4] [/shortcode_3] [/shortcode_2] [/shortcode_1] 但如果我使用add\\u短代码,只有第一个短代码有效。。。有没有办法得到这样的短代码结构?谢谢