【问题标题】:WordPress Parse Shortcode Within a ShortcodeWordPress 在简码中解析简码
【发布时间】:2015-04-16 17:38:40
【问题描述】:

我有一个用于将值输出到 URL 的短代码 ( outputURL )。该值是从短代码 ( 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 插件来管理帖子中的所有嵌入视频 URL;

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

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

  4. 广告轮播插件在视频 ID 周围包裹了一个 DIV:

&lt;div class=""&gt;X23dw34&lt;/div&gt;

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

"...video.com/embed/&lt;div class=""&gt;X23dw34&lt;/div&gt;..."

  1. 我的麻烦是解析 DIV 并仅填充视频 ID 以生成此内容:

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

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

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

编辑 2:

这是整个 iframe,我删除了额外的标签以正确格式化它:

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

【问题讨论】:

  • 我不明白你想要实现什么:你能添加一个例子吗?
  • 我添加了更多细节。希望我能够澄清我的主要问题。谢谢。
  • 这非常有效。谢谢!我也可以针对其他用例对其进行一些修改。我确实遇到了一个障碍,一个用例要求为“src”解析一个 YouTube iframe,并且只检索到“?”的 url。我想出了这个:/src="([^"]+)"/ 但我觉得我错过了一些东西。提前谢谢。
  • 我很高兴它成功了。你能给我一个你想解析的 iframe 标签的例子吗?我刚刚尝试了你的正则表达式,我似乎工作正常
  • 这是整个 iframe,不确定格式是否存在问题:

标签: php wordpress plugins shortcode


【解决方案1】:

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

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多