由于没有人给出完整的答案,我使用了这种方法s_ha_dum 描述并编写了一个函数,该函数返回shortcode
=> attributes
阵列/映射。
function attribute_map($str, $att = null) {
$res = array();
$reg = get_shortcode_regex();
preg_match_all(\'~\'.$reg.\'~\',$str, $matches);
foreach($matches[2] as $key => $name) {
$parsed = shortcode_parse_atts($matches[3][$key]);
$parsed = is_array($parsed) ? $parsed : array();
if(array_key_exists($name, $res)) {
$arr = array();
if(is_array($res[$name])) {
$arr = $res[$name];
} else {
$arr[] = $res[$name];
}
$arr[] = array_key_exists($att, $parsed) ? $parsed[$att] : $parsed;
$res[$name] = $arr;
} else {
$res[$name][] = array_key_exists($att, $parsed) ? $parsed[$att] : $parsed;
}
}
return $res;
}
Example usage:
页面内容:
[outer_shortcode]
[inner_code url="#" title="Hello"]
[/outer_shortcode]
短代码实现:
add_shortcode(\'outer_shortcode\',function($atts,$content) {
return attribute_map($content);
});
add_shortcode(\'inner_shortcode\',function($atts,$content) {
return \'\';
});
这将渲染到:
Array
(
[inner_shortcode] => Array
(
[url] => #
[title] => Hello
)
)