【问题标题】:Custom oembed provider not getting added to Wordpress自定义 oembed 提供程序未添加到 Wordpress
【发布时间】:2021-09-15 01:36:23
【问题描述】:

我想要达到的目标

我想向我的 wordpress 网站添加自定义 oembed 提供程序。 自定义 oembed 提供程序是我自己的网络应用程序。

我已实现的内容

我在我的主题的functions.php文件中添加了以下代码,遵循official documentation和网上找到的示例:

function custom_oembed_provider() {
  error_log("UPDATING PROVERS LIST FAILS HERE FOR SOME REASON");
  wp_oembed_add_provider('(https?:\/\/)?((www)\.)?myip:5000\/figure\/.*', 'http://myip:5000/services/oembed',true); 
}
add_action( 'init', 'custom_oembed_provider' );

我看到的症状

当我尝试嵌入与 URL 模式匹配的内容时,我收到以下错误:

{
    "code": "oembed_invalid_url",
    "message": "Not Found",
    "data": {
        "status": 404
    }
}

我找到的原因

根据我查到的源代码,这是因为我的 url 与任何已知的提供者都不匹配。

确实,感谢强大的 wp-cli 工具,我进行了检查,知道提供程序的列表仅包含docs 中描述的默认 wordpress 白名单 oembed 提供程序,正如您在此屏幕截图中看到的那样:

result from list providers command

但是,我知道 wp_omebed_add_provider 已被调用,它会记录“更新提供程序”消息。

我的尝试

我尝试过的一些事情没有成功:

  • 使用其他自定义提供程序而不是我的(这似乎与提供程序本身无关)
  • 改变主题
  • 以不同的方式和位置声明 wp_oembed_add_provider 函数
  • 更新php版本
  • 在本地安装的 wordpress 5.7.2 上运行相同的测试

知道如何解决这个问题吗?这是我正在构建的网站的一个重要功能 :( 谢谢!

PS:我在托管的 OVH Web 公共云上运行 PHP 7.3 和 Wordpress 5.7.2。

【问题讨论】:

  • 不确定,但是 ((www)\.)?152.228.212.94 会导致无效的 url - 就像错误所说的那样。 www.152.228.212.94 不是有效的主机名(TLD 需要以 a-z 字母开头,94 不符合)
  • 您好 hakre,感谢您的回复。你是对的,正则表达式有一个小故障,但是我不能添加任何 oembed 提供程序,不仅是我的。所以我认为这无关紧要。例如 wp_oembed_add_provider('embedery.com/widget*', 'embedery.com/api/oembed',false);导致相同的输出(提供者未添加到列表中)。
  • 是的,它可能不会导致这种情况,只是我眼中闪过的东西。很高兴看到这一点得到澄清! http://152.228.212.94:5000/services/oembed 是 oembed 提供商吗?您的 WordPress 配置中是否允许为它们使用 HTTP 而不是 HTTPS?而且我不完全确定您是否需要将它放在数据库中,但肯定不会受到伤害。只是说。
  • 是的,它是一个 oembed 提供商,我用另一个客户端而不是 wordpress 对其进行了很好的测试。我对http并不完全确定,但根据我对 wp_oembed_add_provider 所做的理解,它不应该有所作为,因为这个函数只是在列表中添加一些东西。我不是 php 流利的,但函数的作用在 wordpress 源代码中似乎很简单:developer.wordpress.org/reference/functions/…
  • 我现在无法测试这个,但我怀疑你的正则表达式被拒绝了。您需要用正则表达式分隔符包装您的正则表达式字符串。例如。 #your_regex#i 你的正则表达式也可能是不必要的。您可以在没有正则表达式的情况下捕获它,而只需将 asterix 用于某些通配符。您也没有转义 IP 地址中的句点。

标签: php wordpress oembed wp-cli


【解决方案1】:

我已经解决了,有 3 件事重叠,因此很混乱:

  1. wp-cli 打印的自定义提供程序列表似乎没有打印自定义添加的提供程序,所以它混淆了我的调试
  2. 正如一些 cmets 指出的那样,我的正则表达式没有正确编写(谢谢)
  3. 我的测试 url 末尾有一个额外的 /,这导致 oembed 提供程序崩溃,wordpress 返回的错误是“oembed_invalid_url”,我没有看到它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多