【发布时间】: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