【问题标题】:WordPress oembed_fetch_url filter not called未调用 WordPress oembed_fetch_url 过滤器
【发布时间】:2015-01-30 01:28:04
【问题描述】:

我正在开发 WP 网站。我希望内容在内容中显示声音嵌入式播放器。 默认情况下,它添加查询参数可见真。我需要的是将此设置为false。所以我正在尝试 oembed_fetch_url 过滤器,但它不是事件调用。 我已经搜索了谷歌,甚至调用此过滤器时都没有信息。我试过这个只是为了确保它正常工作:

    function soundcloud_url_change($provider, $url, $args) {
        return "somedummyurl.com";
    }
    add_filter('oembed_fetch_url', 'soundcloud_url_change', 10, 3);

网址保持正确。所以我不知道如何操作 oembed url。

【问题讨论】:

  • 您解决了您的问题还是我添加的答案有帮助?好奇你能不能搞定这个……
  • 不。我知道 RyGuy 的答案应该有效,但这是一种丑陋的方式。使用干净的 url 会容易得多。 RyGuy提供的解决方案希望你从html中提取url
  • 所以我现在有点困惑。使用 oembed_fetch_url,在我看来,您正在将参数传递给 url。从服务收到参数后,您不想将参数附加到 url 吗?就我而言,我只处理 YouTube,所以过滤 URL 很简单。不过这很有趣,因为我没有任何运气在获取时得到坚持的论据,只是在结果上。
  • 是的,我的意思是,您的解决方案会起作用,但正如我所说,从 html 中提取 url 要困难得多。我还没有完成这个。但我已经知道唯一的方法是更改​​ html

标签: wordpress oembed


【解决方案1】:

您可能想要挂钩到过滤器: oembed_result

我需要修改 youtube 嵌入的 url 并最终得到这个块:

function mod_oembed_youtube_url($html,$url,$args){
    if(strpos($html, 'youtu.be') !== false || strpos($html, 'youtube.com') !== false){
        $out = preg_replace("@src=(['\"])?([^'\">\s]*)@", "src=$1$2&rel=0", $html);
        return $out;
    }
    return $html;
}
add_filter('oembed_result','mod_oembed_youtube_url',10,3);

这显然会更有效,并且仅适用于 YouTube,但希望可以引导您朝着正确的方向前进。作为参考,oembed_result 位于:

/wp-includes/class-oembed.php   Line: 126

【讨论】:

    【解决方案2】:

    WordPress 实际上缓存了获取的结果,所以如果你遇到这种情况,它可能是 short-circuiting 在它到达过滤器之前,因为它在缓存中找到了标记。 Check out this 用于清除 oembed 缓存,然后查看您的过滤器是否未运行。

    话虽如此,YouTube 会删除您发送的所有查询变量,因此您需要使用此处列出的其他答案专门用于 YouTube 嵌入。

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多