用新的短代码包装现有的短代码

时间:2016-03-18 21:30:50

标签: php wordpress wordpress-plugin

我正在编写一个扩展现有插件行为的wordpress插件。

现有的插件定义了一个名为[original]的短代码,我定义了一个名为[wrapper]的短代码,它添加了一些功能,但基本上表现相同。

这是我写的代码:

function wrapper_shortcode($atts,$content)
{
    //Do something...
    return do_shortcode("[original]$content[/original]");
}
add_shortcode( 'wrapper', 'wrapper_shortcode' );

我的问题是,如何传递$atts短代码旁边的属性([original]),有没有更好的方法来调用do_shortcode()函数?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望获取所有短代码参数并将其从wrapper盲目地传递到您的original短代码。

我会建议在未经适当验证的情况下传递参数。

您有几个选择:

  1. 正如白银建议的那样,删除original并将其替换为您自己的修改版本(因为您无法更新插件)。每次发布插件后都要更新它。

  2. 添加您要验证并通过的参数。并在回报中将其发回。

  3. 不推荐 - 只因为你可以;并不意味着你应该这样做。

    听起来好像你想要做以下事情 - 如果你这样做,你真的可能会遇到麻烦,除非你验证每个属性:

    function wrapper_shortcode($atts, $content) {
        $o_shortcode_atts = " ";
        foreach ($atts as $key_att => $val_att) {
    
            // Validate $key_att and $val_att here - FOR SECURITY!!!
    
            $o_shortcode_atts = $o_shortcode_atts . " ".$key_att."=\"".$val_att."\" ";
        }
        trim($o_shortcode_atts," ");
    
        // Do something...
    
        return do_shortcode("[original".$o_shortcode_atts."]".$content."[/original]");
    }
    

    警告 - 如果您没有确认,这可能会导致问题