bor*_*kur 51 php facebook meta-tags facebook-opengraph
正如标题暗示我试图动态生成Facebook Open Graph元标记,但我无法让它工作.它甚至可能吗?
最后我在@saccharine的帮助下完成了它.以下代码适用于我:
<?php
$params = array();
if(count($_GET) > 0) {
$params = $_GET;
} else {
$params = $_POST;
}
// defaults
if($params['type'] == "") $params['type'] = "restaurant";
if($params['locale'] == "") $params['locale'] = "en_US";
if($params['title'] == "") $params['title'] = "default title";
if($params['image'] == "") $params['image'] = "thumb";
if($params['description'] == "") $params['description'] = "default description";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# MY_APP_NAME_SPACE: http://ogp.me/ns/fb/MY_APP_NAME_SPACE#">
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<!-- Open Graph meta tags -->
<meta property="fb:app_id" content="MY_APP_ID" />
<meta property="og:site_name" content="meta site name"/>
<meta property="og:url" content="http://mysite.com/index.php?type=<?php echo $params['type']; ?>&locale=<?php echo $params['locale']; ?>&title=<?php echo $params['title']; ?>&image=<?php echo $params['image']; ?>&description=<?php echo $params['description']; ?>"/>
<meta property="og:type" content="MY_APP_NAME_SPACE:<?php echo $params['type']; ?>"/>
<meta property="og:locale" content="<?php echo $params['locale']; ?>"/>
<meta property="og:title" content="<?php echo $params['title']; ?>"/>
<meta property="og:image" content="http://mysite.com/img/<?php echo $params['image']; ?>.png"/>
<meta property="og:description" content="<?php echo $params['description']; ?>"/>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
我现在放入Facebook调试器的网址现在可以包含任何动态参数,甚至不包括任何动态参数,全部或仅包含选择,以及任何顺序如下:
http://mysite.com/index.php?type = restaurant&title = luigis
或者这个:http://mysite.com/index.php?locale = de_DE&description = hi&type = bistro
完成后:我现在可以将动作发布到用户的流:
function postRestaurant() {
FB.api('me/MY_APP_NAMESPACE:have_lunch?\
start_time=2000-12-12T04:00:00&\
expires_in=7200&\
restaurant=' + encodeURIComponent(getRedirectURI() + '?type=restaurant' + '&description=arnold' + '&title=stalone'), 'post', function (response) {
if (!response || response.error) {
console.log('postRestaurant: Error occured => ' + response.error.message);
} else {
console.log('postRestaurant: Post was successful! Action ID: ' + response.id);
}
});
}
Run Code Online (Sandbox Code Playgroud)
奇迹般有效!:]
sac*_*ine 31
首先,我想重申,我几乎肯定你的问题是由于你传入调试器的url不是动态生成的.url标记基本上充当重定向器.除非它与您正在测试的网址完全相同(意味着网址元对象上的元标记与您传入的网址上的元标记相同),否则您将无法获得所需的结果.
元标记
<meta property="og:url">
Run Code Online (Sandbox Code Playgroud)
需要动态生成.调试器被重定向到您的默认索引页而不是动态生成的页面.
例如,我为我正在使用的每个对象分配一个id,所以我有类似下面的内容
<meta property="og:url" content="http://example.com/index.php?id=<?php echo $_GET['id'] ?>"/>
Run Code Online (Sandbox Code Playgroud)
我将确切的url传入调试器,因此调试器所在的最后一页将是那个确切的URL.
另外,在下面
<meta property="og:type" content=""/>
Run Code Online (Sandbox Code Playgroud)
如何动态生成属性?您是否记得在实际代码中设置如下内容?
<meta property="og:type" content="<?php echo $_GET['type'] ?>"/>
Run Code Online (Sandbox Code Playgroud)
您似乎也将所有内容都推入了网址,这很危险并且可能导致巨大的麻烦,这可能是这里的问题.相反,只推一件事,例如?type = bistro,然后从DB传播必要的数据.
我建议基于object_id动态生成大多数OG标记.存储每个object_id的相关OG信息,然后在访问时传播它们.这样,您还可以轻松扩展和编辑OG更新时使用的标记.
如果你有OG的问题,你应该毫不犹豫地将它们作为新问题而不是评论发布,因为我保证其他人也有同样的问题.
| 归档时间: |
|
| 查看次数: |
59868 次 |
| 最近记录: |