如何将POST内容的快捷代码中的数据提取或解析到数组中?

时间:2017-04-28 作者:user658182

我正在从一个可视化页面编辑器迁移到另一个。我正在提取被短代码开始和结束标记包围的文本。

在编写自己的解析脚本之前,我想确保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\'
);
不过我能应付。只是想确保我没有重新发明轮子。注意,我不关心短代码定义本身中的任何数据。

1 个回复
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;

相关推荐

Do not parse shortcode in CPT

我有一个CPT,我不想在它的内容中解析shortcode(使用\\u content()函数)。我可以使用remove\\u filter删除短代码的默认过滤器。但我如何确定我只是为了我想要的CPT而删除过滤器?我有一个在页面中使用的快捷码[我的自定义快捷码]。此短代码使用WP\\U查询和输出CPT帖子。我不想在这篇CPT文章中分析短代码。我是否应该在短代码解析挂钩之前用虚拟内容更改短代码,并在之后替换回来?或者我应该在我的CPT输出之前删除短代码的默认过滤器,然后在我的CPT输出完成后再次添加短代码的默