WordPress在短代码中解析短代码

时间:2015-04-16 17:38:40

标签: php wordpress plugins 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插件管理帖子中的所有嵌入式视频网址;

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

  3. 我想使用广告旋转器插件来管理多个视频ID,并根据广告投放参数提供单个视频ID,并通过短代码调用(即[valueURL id =&#34; 5&#34;]);

  4. 广告旋转器插件围绕视频ID包装DIV:

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

    1. 使用我的功能,我已经能够修改管理嵌入式视频URL的插件,以填充视频ID,包括由广告旋转器短代码检索的div包装器。不幸的是,输出结果是:
    2. "...video.com/embed/<div class="">X23dw34</div>..."

      1. 我的麻烦就是解析DIV并只填充视频ID以产生这个:
      2. "...video.com/embed/X23dw34..."

        我不确定我对短代码和解析的有限理解是否是问题,或者我的最终目标是否无法用简单的函数处理。

        如果您需要更多信息,请与我们联系。

        编辑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>

1 个答案:

答案 0 :(得分:0)

我并不完全明白,但这应该会让你走上正轨:

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
}

因此,如果在帖子/页面的内容中放入[output id=5],它会检索[valueURL id=5]的结果,找到div标记的内容并将其返回以打印在页面。

您可以修改它以返回除ID之外的其他内容。