0

我将立即发布解决方案,但这是我今天遇到的问题,后来我解决了。我的问题是我想在其他简码调用的参数中嵌套一些简码结果。

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

4

1 回答 1

0

下面的 PHP 创建了一个新的简码(“nest”),您可以传递一个“简码”参数来指定您最初要调用的简码,然后它将在解析所有参数自己的简码后调用该简码。要将简码放入参数中,请使用花括号 { } 而不是尖括号 [ ]。

例如:

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

会变成:

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

并且 [geturl] 短代码调用将在返回短代码之前解析,给出如下内容:

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

它也适用于 [start] [/end] 短代码,但您必须传递一个“内容”参数,指定 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);
}
于 2013-10-23T02:23:38.273 回答