将变量传递给嵌套的短码

时间:2010-11-15 作者:jdp

我正在设置一个带有嵌套短代码的插件,即。

[ct_training_group]
    [ct_training]
[/ct_training_group]
这里有一个陷阱:我使用[ct_training] 在父级外部以及父级内部编写代码,并希望在每种情况下输出略有不同的内容。当它在一个组中时,我需要省略<ul></ul> 我会把[ct_training] 当它自己被调用时进行短代码。

我认为最简单的方法是将一个变量从父对象传递给子对象。有没有什么优雅的方式可以做到这一点,这样我就不需要和globals之类的人打交道了?

谢谢

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

我想你只是通过了ct_training_group 另一个调用do_shortcode()? 您不能向它传递额外的参数,因此如果您不想使用全局状态变量,您可以始终替换ct_training 用一个不增加额外费用的<ul>. 处理程序似乎没有缓存,因此不会有性能损失。

add_shortcode(\'ct_training\', \'ct_training_full\');
function ct_training_full($attr, $content)
{
    return \'<ul>\' . ct_training_item($attr, $content) . \'</ul>\';
}

function ct_training_item($attr, $content)
{
    return \'<li>CT Training</li>\';
}

add_shortcode(\'ct_training_group\', \'ct_training_group_handler\');
function ct_training_group_handler($attr, $content)
{
    $output = \'<h3>CT Training group</h3>\';
    $output .= \'<ul>\';
    // Redefine the sub-code
    add_shortcode(\'ct_training\', \'ct_training_item\');
    $output .= do_shortcode($content);
    // Reset the sub-code
    add_shortcode(\'ct_training\', \'ct_training_full\');
    $output .= \'</ul>\';
    return $output;
}

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?