Следующий PHP создает новый шорткод («гнездо»), которому вы можете передать параметр «шорткод», чтобы указать шорткод, который вы изначально собирались вызывать, и затем он вызовет этот шорткод после разбора всех аргументов самих шорткодов. Чтобы поместить шорткод в аргументы, используйте фигурные скобки { } вместо угловых скобок [ ].
Например:
[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);
}
person
Chris Rae
schedule
23.10.2013