嵌入Facebook页面Feed异常:部分页面报'Unowned Pages不支持'错
解决Facebook页面Feed嵌入报错:Error: Unowned Facebook Pages are not supported
问题分析
你遇到的报错核心原因有两点:
- 嵌入代码使用了Facebook旧版
/pages/路径+ID的页面链接格式,当前fb-page组件对这种旧格式的支持存在限制,尤其是未认领的页面。 - 代码中
blockquote的链接文本错误(写成了Whistler Blackcomb,与目标页面名称不符),可能加剧解析异常。
另外,报错提示明确说明未被认领的页面不支持嵌入——即使直接访问链接正常,嵌入组件也会做权限校验。
解决方案
1. 替换为新版页面用户名链接
打开目标Facebook页面(比如平谷高原スキー場),查看地址栏最终跳转后的链接,通常格式为https://www.facebook.com/[页面用户名]/,用这个链接替换代码中的data-href、cite和<a>标签的href属性。
修正后的平谷高原スキー場嵌入代码示例:
<div class="fb-page" data-href="https://www.facebook.com/[平谷高原スキー場的用户名]" data-tabs="timeline" data-width="" data-height="" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"> <blockquote cite="https://www.facebook.com/[平谷高原スキー場的用户名]" class="fb-xfbml-parse-ignore"> <a href="https://www.facebook.com/[平谷高原スキー場的用户名]">平谷高原スキー場</a> </blockquote> </div>
2. 确保页面已被认领
如果替换链接后仍报错,需要该Facebook页面的管理员登录Facebook,完成页面认领流程:
- 进入页面设置,找到「页面信息」或「认领此页面」选项,按照提示完成验证(通常需要企业邮箱、电话或营业执照)。
3. PHP批量处理方案
针对数百个滑雪度假村的链接批量替换,可以用正则匹配旧格式链接,同时结合页面名称修正链接文本:
<?php // 示例:批量替换旧版Facebook页面链接为新版用户名格式 // 假设你有一个数组存储所有滑雪度假村的信息:页面旧链接、页面名称、页面用户名 $resorts = [ [ 'old_link' => 'https://www.facebook.com/pages/平谷高原スキー場/166400960115958', 'name' => '平谷高原スキー場', 'username' => 'hirayaskiresort' // 替换为实际用户名 ], // 更多度假村信息... ]; foreach ($resorts as $resort) { // 生成修正后的嵌入代码 $embed_code = <<<HTML <div class="fb-page" data-href="https://www.facebook.com/{$resort['username']}/" data-tabs="timeline" data-width="" data-height="" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"> <blockquote cite="https://www.facebook.com/{$resort['username']}/" class="fb-xfbml-parse-ignore"> <a href="https://www.facebook.com/{$resort['username']}/">{$resort['name']}</a> </blockquote> </div> HTML; // 输出或保存修正后的代码 echo $embed_code . "\n\n"; } ?>
如果无法提前获取所有页面的用户名,可以调用Facebook Graph API(需申请API密钥)批量获取页面信息,通过页面ID查询username字段:
// 示例:通过Graph API获取页面用户名(需access_token) $page_id = '166400960115958'; $access_token = '你的API访问令牌'; $response = file_get_contents("https://graph.facebook.com/v18.0/{$page_id}?fields=username&access_token={$access_token}"); $page_data = json_decode($response, true); $username = $page_data['username'] ?? '';
内容的提问来源于stack exchange,提问作者spreaderman
相关产品推荐
相关产品推荐

