如何在wordpress中递归解码简码
Posted
技术标签:
【中文标题】如何在wordpress中递归解码简码【英文标题】:How to decode shortcodes recursively in wordpress 【发布时间】:2019-12-16 21:49:08 【问题描述】:我正在尝试递归调用简码。 这个想法是在短代码中使用短代码,我尝试爆炸字符串尝试了其他一些逻辑,但都没有奏效。
你能帮忙吗?
我将在下面分享一个示例。
add_shortcode( 'first', function ( $attr )
return 'First ' . $attr['key1'] . ' ' . $attr['key2'];
);
add_shortcode( 'second', function ( $attr )
return 'Second ' . $attr['key1'] . ' ' . $attr['key2'];
);
add_shortcode( 'third', function ( $attr )
return 'Third ' . $attr['key1'];
);
现在假设字符串是$string = '[first key1="[second key1="abcd" key2="shortcode"]" key2="[third key1="shortcode"]"]';
或$string = '[first key1="[second key1="abcd" key2="[third key1="shortcode"]"]" key2="[third key1="shortcode"]"]';
现在第一个字符串的输出很可能应该是这样的:'First Second abcd shortcode Third shortcode'
第二个应该是这样的:'First Second abcd Third shortcode Third shortcode'
但我没有得到结果。 有人可以帮我创建一个函数,它接受一个字符串并递归检查短代码,然后执行它们(do_shortcode)。
【问题讨论】:
【参考方案1】:终于自己想出了如何实现这一点。
休息了一会儿,然后我想到了解决方案。
我正在为将来可能面临同样问题的人添加下面的代码。
public function maybe_parse_nested_merge_tags( $string )
$position_end = strpos( $string, ']' );
if ( false === $position_end )
return $string;
$split = str_split( $string, $position_end );
$position_start = strrpos( $split[0], '[', - 1 );
if ( false === $position_start )
return $string;
$shortcode_array = explode( '[', $split[0] );
$shortcode = end( $shortcode_array );
$result = do_shortcode( '[' . $shortcode . ']' );
$string = str_replace( '[' . $shortcode . ']', $result, $string );
return $this->maybe_parse_nested_merge_tags( $string );
【讨论】:
以上是关于如何在wordpress中递归解码简码的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Wordpress 页面/帖子中获取所有标签作为简码列表?