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