我将立即发布解决方案,但这是我今天遇到的问题,后来我解决了。我的问题是我想在其他简码调用的参数中嵌套一些简码结果。
我知道可以使用 do_shortcode 处理短代码,但我不拥有这些短代码调用的源代码,我不想编辑它们。
下面的 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);
}