Facebook嵌入加载错误的语言

时间:2017-08-23 作者:Erythros

我使用的主题具有嵌入Facebook视频的功能。问题是,每当我使用它时,它都会将SDK加载到uk_UA 无论出于何种原因(乌克兰)。

与我的网站或Facebook相关的任何内容都没有使用这种语言。联系主题开发人员后,我被告知这不是他们的错,可能与服务器配置有关。

我尝试了一个我在这里找到的黑客解决方案,添加了函数。php以下脚本

add_filter( \'the_content\', \'facebook_sdk_replace\' );
function facebook_sdk_replace( $content ) { if ( is_single() ) { $content = str_replace("/uk_UA/", "/en_US/", $content); } return $content; }
由于没有效果,开发人员建议我在\\u header\\u php中添加以下内容

<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&version=v2.6";
  fjs.parentNode.insertBefore(js, fjs);
}(document, \'script\', \'facebook-jssdk\'));</script>
我面临的问题是,这样做会导致以下错误:

无法修改标题信息-标题已由发送

因此,我返回了我的标题。php。有没有办法在不更改标题的情况下解决此问题?

稍后编辑:我找到的唯一代码片段如下:

        /* $buffy = \'
        <div class="wpb_video_wrapper td-facebook-video">
            <iframe src="\' . td_global::$http_or_https . \'://www.facebook.com/plugins/video.php?href=\' . urlencode($videoUrl) . \'&show_text=0" width="\' . $width . \'" height="\' . $height . \'" scrolling="no" frameborder="0" allowTransparency="true" allowFullScreen="true" ></iframe>
        </div>
        \';
        */

        /**
         * cache & oembed implementation
         */
        $cache_key = self::get_facebook_id($videoUrl);
        $group = \'td_facebook_video\';

        if (td_remote_cache::is_expired($group, $cache_key) === true) {

            // cache is expired - do a request
            $facebook_api_json = td_remote_http::get_page(\'https://www.facebook.com/plugins/video/oembed.json/?url=\' . urlencode($videoUrl) , __CLASS__);

            if ($facebook_api_json !== false) {
                $facebook_api = @json_decode($facebook_api_json);

                //json data decode
                if ($facebook_api === null and json_last_error() !== JSON_ERROR_NONE) {
                    td_log::log(__FILE__, __FUNCTION__, \'json decode failed for facebook video embed api\', $videoUrl);
                }

                if (is_object($facebook_api) and !empty($facebook_api->html)) {

                    //add the html to the buffer
                    $buffy = \'<div class="wpb_video_wrapper">\' . $facebook_api->html . \'</div>\';

                    //set the cache
                    td_remote_cache::set($group, $cache_key, $facebook_api->html, self::$caching_time);
                }

            } else {
                td_log::log(__FILE__, __FUNCTION__, \'facebook api html data cannot be retrieved/json request failed\', $videoUrl);
            }

        } else {
            // cache is valid
            $api_html_embed_data = td_remote_cache::get($group, $cache_key);
            $buffy = \'<div class="wpb_video_wrapper">\' . $api_html_embed_data . \'</div>\';
        }
        break;

2 个回复
最合适的回答,由SO网友:Erythros 整理而成

此问题的原因已在wordpress core ticketing system.

这可能是您应该向Facebook报告的事情(祝您好运),因为WordPress在html元素上正确地输出了lang属性。当使用en\\u US时,Facebook可能会使用启发式来确定实际页面语言是否为英语,这与谷歌Chrome的做法类似。当服务由于不正确的实现而无法信任web标准时,web会发现自己处于这样一种不幸的境地(即网站不是用美式英语,但仍然使用en\\u US作为语言)。在您的情况下,您可以使用og:locale OpenGraph标签说服Facebook您的内容实际上是美国英语。

SO网友:Anton Lukin

我发现了你的问题。

您已使用facebook初始化脚本在页面上插入了来自facebook的视频。

Take a look at language options

找到插入此视频的位置,并在那里将uk\\u UA更改为en\\u US。

结束

相关推荐

在CPT上自动禁用Facebook评论

我正在使用Facebook评论插件。我有一个自定义的帖子类型,从不使用Facebook评论。我正在尝试创建一个函数,以便在发布自定义帖子类型时自动关闭这些功能。在数据库中有一个称为_disable_fbc 它接受两个值。meta\\u值为on 关闭Facebook评论。自定义帖子类型为music.function on_music_publish( $post_ID ) { update_post_meta($post_ID, \'_disable_fbc\', \'on\' );