我正在从一个可视化页面编辑器迁移到另一个。我正在提取被短代码开始和结束标记包围的文本。
在编写自己的解析脚本之前,我想确保Wordpress没有解决这个问题的解决方案,或者其他东西也不存在。我觉得这是一个共同的需要,可能已经有东西来处理它了。
下面是post\\u内容数据的示例。正如您所看到的,这可以得到无限嵌套和复杂的。
我想取出数据并将其放入数组中。为了便于阅读,我突出显示了数据中仅有的两个文本短语。
[cs\\u content][cs\\u section parallax=“false”separator\\u top\\u type=“none”separator\\u top\\u height=“50px”separator\\u top\\u angle\\u point=“50”separator\\u bottom\\u type=“none”separator\\u bottom\\u height=“50px”separator\\u bottom\\u angle\\u point=“50”style=“边距:0px;填充:45px 0px;”][cs\\u row internal\\u container=“true”marginless\\u columns=“false”style=“margin:0px auto;padding:0px;”][cs\\u column fade=“false”fade\\u animation=“in”fade\\u animation\\u offset=“45px”fade\\u duration=“750”type=“1/1”style=“padding:0px;”][cs\\U文本]this is text[/cs\\u text][/cs\\u column][/cs\\u row][/cs\\u section][cs\\u section parallax=“false”separator\\u top\\u type=“none”separator\\u top\\u height=“50px”separator\\u top\\u angle\\u point=“50”separator\\u bottom\\u height=“50px”separator\\u bottom\\u angle\\u point=“50”style=“边距:0px;填充:45px 0px;”][cs\\u row internal\\u container=“true”marginless\\u columns=“false”style=“margin:0px auto;padding:0px;”][cs\\u column fade=“false”fade\\u animation=“in”fade\\u animation\\u offset=“45px”fade\\u duration=“750”type=“1/1”style=“padding:0px;”][cs\\U文本]text phrase 2[/cs\\u文本][/cs\\u列][/cs\\u行][/cs\\u节][/cs\\u内容]
提取后,我想将其存储在如下数组中:
$data = array(
\'this is text\',
\'text phrase 2\'
);
不过我能应付。只是想确保我没有重新发明轮子。注意,我不关心短代码定义本身中的任何数据。
SO网友:Nathan Johnson
这不是WordPress的问题,但您可以使用PHP函数preg_match_all
提取包装在中的所有文本[cs_text]
这样的标签:
function wpse_265295_extract_cs_text( $subject ) {
$pattern = "#\\[cs_text\\](.*?)\\[/cs_text\\]#s";
preg_match_all( $pattern, $subject, $matches );
return isset( $matches[1] ) ? $matches[1] : [];
}
如果要提取任意短代码:
if( ! function_exists( \'extract_shortcodes\' ) ) :
function extract_shortcodes( $subject, $shortcode ) {
$pattern = "#\\[$shortcode\\](.*?)\\[/$shortcode\\]#s";
preg_match_all( $pattern, $subject, $matches );
return isset( $matches[1] ) ? $matches[1] : [];
}
endif;