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');
我进行了研究并能够将它们组合在一起,但我不确定我是否正朝着正确执行它的正确方向前进。任何有助于实现我的目标的帮助将不胜感激。
编辑:
这是为了进一步澄清我的问题。
我正在使用一个 WordPress 插件来管理 post;
内的所有嵌入视频 URL
作为一项功能,该插件允许通过其管理页面添加单个视频 ID(即 vid=X23dw34),该页面在查看主视频之前会在播放列表中查看;
我想使用广告旋转器插件来管理多个视频 ID,并根据广告服务参数提供单个视频 ID,并通过简码调用(即 [valueURL id ="5"] );
广告旋转器插件将 DIV 包裹在视频 ID 周围:
<div class="">X23dw34</div>
- 使用我的函数,我已经能够修改管理嵌入式视频 URLs 的插件来填充视频 ID,包括由广告旋转器简码检索到的 div 包装器。不幸的是,输出结果是:
"...video.com/embed/<div class="">X23dw34</div>..."
- 我的麻烦是解析出 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 的内容。
我有一个短代码 (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');
我进行了研究并能够将它们组合在一起,但我不确定我是否正朝着正确执行它的正确方向前进。任何有助于实现我的目标的帮助将不胜感激。
编辑:
这是为了进一步澄清我的问题。
我正在使用一个 WordPress 插件来管理 post;
内的所有嵌入视频 URL
作为一项功能,该插件允许通过其管理页面添加单个视频 ID(即 vid=X23dw34),该页面在查看主视频之前会在播放列表中查看;
我想使用广告旋转器插件来管理多个视频 ID,并根据广告服务参数提供单个视频 ID,并通过简码调用(即 [valueURL id ="5"] );
广告旋转器插件将 DIV 包裹在视频 ID 周围:
<div class="">X23dw34</div>
- 使用我的函数,我已经能够修改管理嵌入式视频 URLs 的插件来填充视频 ID,包括由广告旋转器简码检索到的 div 包装器。不幸的是,输出结果是:
"...video.com/embed/<div class="">X23dw34</div>..."
- 我的麻烦是解析出 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 的内容。