WordPress 在简码中解析简码

WordPress Parse Shortcode Within a Shortcode

我有一个短代码 (outputURL),用于将值输出到 URL。该值是从短代码 ( valueURL ) 中检索的。 valueURL 输出是包含在 div:

中的文本
<div class="">textForURL</div>

我只需要 textForURL 值,不包括 div 标签。到目前为止,我只能输出 div 标签和文本,但不能输出纯文本的干净版本。

这是我的简码函数:

function ouputURL(){

$content = '[valueURL id="5"]';
$clean = preg_replace("#<div.*?>.*?</div>#", "", $content);
echo do_shortcode( $clean );
}

add_shortcode('output', 'ouputURL');

我进行了研究并能够将它们组合在一起,但我不确定我是否正朝着正确执行它的正确方向前进。任何有助于实现我的目标的帮助将不胜感激。

编辑:

这是为了进一步澄清我的问题。

  1. 我正在使用一个 WordPress 插件来管理 post;

  2. 内的所有嵌入视频 URL
  3. 作为一项功能,该插件允许通过其管理页面添加单个视频 ID(即 vid=X23dw34),该页面在查看主视频之前会在播放列表中查看;

  4. 我想使用广告旋转器插件来管理多个视频 ID,并根据广告服务参数提供单个视频 ID,并通过简码调用(即 [valueURL id ="5"] );

  5. 广告旋转器插件将 DIV 包裹在视频 ID 周围:

<div class="">X23dw34</div>

  1. 使用我的函数,我已经能够修改管理嵌入式视频 URLs 的插件来填充视频 ID,包括由广告旋转器简码检索到的 div 包装器。不幸的是,输出结果是:

"...video.com/embed/<div class="">X23dw34</div>..."

  1. 我的麻烦是解析出 DIVs 并只填充视频 ID 来生成这个:

"...video.com/embed/X23dw34..."

我不确定是我对简码和解析的理解有限,还是我的最终 objective 不能用一个简单的函数来处理。

如果您需要更多信息,请告诉我。

编辑 2:

这是整个 iframe,为了正确设置格式,我删除了额外的标签:

<iframe width="100%" height="459" src="http://www.youtube.com/embed/oiE5qs8opqo?rel=0&autoplay=0&showinfo=0&controls=0&cc_load_policy=0&modestbranding=1&iv_load_policy=3&wmode=transparent&version=3&autohide=1" frameborder="0" allowfullscreen="true" allownetworking="internal"></iframe>

我没有完全理解,但希望这能让你走上正轨:

add_shortcode('output', 'ouputURL');
function ouputURL ( $atts ) {
    if(!isset($atts['id']))
        return;
    $valueURL = do_shortcode("[valueURL id={$atts['id']}]");
    preg_match("#<div.*?>(.*?)</div>#", $valueURL, $matches);
    if(!isset($matches[1]))
        return;
    return $matches[1]; // the ID
}

因此,如果在 post/page 的内容中放入 [output id=5],它将检索 [valueURL id=5] 的结果,找到 div 标签的内容,并且 return 打印在页面上。

您可以将其修改为 return 不仅仅是 ID 的内容。