在WordPress中嵌套短代码,这些代码不是我的,也不是为了嵌套而设计的

时间:2013-10-23 02:23:38

标签: php wordpress shortcode

我将立即发布一个解决方案,但这是我今天抓到的东西,后来我解决了。我的问题是我想在其他短代码调用的参数中嵌入一些短代码结果。

我知道可以使用do_shortcode处理短代码,但我没有这些短代码调用的源代码,我不想编辑它们。

1 个答案:

答案 0 :(得分:0)

以下PHP创建了一个新的短代码(“nest”),你可以传递一个“shortcode”参数来指定你最初要调用的短代码,然后在解析所有的参数后调用该短代码用于短代码。要在参数中添加短代码,请使用花括号{}而不是尖括号[]。

例如:

[nest shortcode="twitter" float="left" url="{geturl}"]

将成为:

[twitter float='left' url='[geturl]']

并且[geturl]短代码调用将在返回短代码之前解析,如下所示:

[twitter float='left' url='http://stackoverflow.com']

它也适用于[start] [/ end]短代码,但你必须传递一个“content”参数,指定HTML才能进入中间位置。例如:

[nest shortcode="button" content="{state}" size="large"]

可能最终成为:

[button size='large']South Carolina[/button]

希望这有助于某人!

代码如下所示为functions.php。

add_shortcode('nest', 'shortcode_nest');

function shortcode_nest($atts) {
    // Call using [nest shortcode=originalshortcode param="in {getcountryshortcode}"]
    //    to generate [originalshortcode param="in United Kingdom"]
    // or [nest shortcode=originalshortcode content="hello!" param="in {getcountryshortcode}"]
    //    to generate [originalshortcode param="in United Kingdom"]hello![/originalshortcode]
    $shortcode = $atts["shortcode"];
    unset($atts["shortcode"]);
    foreach ($atts as $key => $value) {
        $value = str_replace('{', '[', str_replace('}', ']', $value));
        $value = do_shortcode($value);
        if ($key == "content")
            $content = $value;
        else
            $stratts .= "$key='$value' ";
    }
    if ($content == "")
        $fullcode = "[$shortcode $stratts]";
    else
        $fullcode = "[$shortcode $stratts]$content" . '[/' . $shortcode . ']';
    return do_shortcode($fullcode);
}