下面是非常非常粗略的代码,可以帮助您开始:
add_shortcode(\'outer_shortcode\',function($attts,$content){return 1;});
add_shortcode(\'inner_code\',function($attts,$content){return 1;});
$str = \'[outer_shortcode][inner_code url="#" title="Hello"][inner_code url="#2" title="Hello2"][/outer_shortcode]\';
$reg = get_shortcode_regex();
preg_match_all(\'~\'.$reg.\'~\',$str,$matches);
var_dump($matches);
preg_match_all(\'~\'.$reg.\'~\',$matches[5][0],$matches2);
var_dump($matches2);
所发生的是,您正在解析与外部短代码匹配并“分离”的字符串。然后需要解析该短代码的内容(数组元素5)来解析两个内部短代码。
count($matches[0][0])
应为2。原则很简单,但有很多方法可能出错。您可能需要进行大量的错误检查,并且可能需要迭代数组,而不是假设第一个匹配,
$matches[5][0]
, 就像我做的那样。
如果你look at the source for get_shortcode_regex
您可以看到这个复杂数组的不同部分意味着什么:
199 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
200 * 2 - The shortcode name
201 * 3 - The shortcode argument list
202 * 4 - The self closing /
203 * 5 - The content of a shortcode when it wraps some content.
204 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
如果你正在做我认为你正在做的事情,你可能想要这样的东西:
add_shortcode(
\'outer_shortcode\',
function($atts,$content){
$reg = get_shortcode_regex();
preg_match_all(\'~\'.$reg.\'~\',$content,$matches);
echo count($matches[0]);
return do_shortcode($content);
}
);
add_shortcode(
\'inner_code\',
function($atts,$content){
$the_stuff = \'<li>\';
$the_stuff .= \'<a href="\' .$atts[\'url\']. \'" rel="external">\'.$atts[\'title\'].\'</a>\';
$the_stuff .= \'</li>\';
return $the_stuff;
}
);
// now test it
$str = \'[outer_shortcode][inner_code url="#" title="Hello"][inner_code url="#2" title="Hello2"][/outer_shortcode]\';
echo do_shortcode($str);
我想你可以填写其余的加价。