Wordpress 为 Facebook SDK 加载了错误的语言

Wordpress loading wrong language for Facebook SDK

我们正在尝试使用 post 的 URL 将 Facebook post 嵌入到 Wordpress 中。除了语言错误外,这工作正常。该语言不是以英语出现,而是以阿拉伯语出现。

我相信我已经将问题追溯到 Wordpress 加载的 Facebook SDK。

这是 Facebook 说要添加到页面的代码

<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&amp;version=v2.5";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

这就是 Wordpress 正在加载的内容

<div id="fb-root"></div>
<p><script>(function(d, s, id) {  
    var js, fjs = d.getElementsByTagName(s) [0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/ar_AR/sdk.js#xfbml=1&version=v2.3";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

我认为问题出在 Facebook 连接 url 中的 "ar_AR" 而不是 "en_US"。但是,我无法弄清楚它是如何或在何处控制的。

我检查了Wordpress 中的语言选择,选择了英语。我尝试了没有插件的全新 Wordpress 4.7 安装,但问题仍然存在。

这是网站上出现的阿拉伯语示例 post。这也是我们要插入到 Wordpress 中以创建嵌入式 post.

https://www.facebook.com/farahdhukai/videos/1217650958285047/

这是它以阿拉伯语而不是英语出现的地方

http://mvs.dev.clickharder.net/facebook-sdk-test/

顶部嵌入使用 Wordpress 嵌入功能,只需添加视频的 URL。底部嵌入使用 Facebook iframe 嵌入方法进行测试。

我还没有想出如何在 Wordpress 中禁用 Facebook SDK 以便我自己插入它,或者如何将它从 ar_AR 更改为 en_US。

我在新安装的 Wordpress 中搜索了所有对 "Facebook" 的引用,但一无所获。我在 Wordpress 中找不到与此问题相关的 "ar_AR" 参考资料。

我们尽量避免使用嵌入 posts 的 iframe 方法。它不适合我们的情况,所以这不是我们的解决方案。

非常感谢任何帮助。

@CBroe 提供了与我相同的解决方案。我添加了以下代码来替换引用。

add_filter( 'the_content', 'facebook_sdk_replace' );
function facebook_sdk_replace( $content ) {
    if ( is_single() ) {
        $content = str_replace("/ar_AR/", "/en_US/", $content);
    }
    return $content;
}

语言错误的原因是您的网络服务器的位置。

Facebook 显然会根据您服务器的 IP 地址检测语言。

这是解决方法,可避免性能开销:

function oembed_result($content, $url, $args) {
    return str_replace("https://connect.facebook.net/ar_AR/", "https://connect.facebook.net/en_US/", $content);
}
add_filter('oembed_result','oembed_result', 10, 3);

之后别忘了从数据库中删除缓存:

DELETE FROM wp_postmeta WHERE meta_key LIKE "_oembed%"