我在网上寻找解决方案,但似乎无法到达任何地方。
我的页面(php)正在加载一个网址(比方说www.mysite.com) 在页面中可以完成音乐(专辑)的几个搜索选项并显示曲目。 (没有刷新页面)。信息来自数据库。 所以网址保持不变。 在这个搜索过程中,facebook meta标签(description,url,title)也保持不变,因为我从不重新加载页面,我只将内容加载到div中。
我希望能够“喜欢”这张专辑,并反馈给它。所以我创建了使用网址加载相册的功能:www.mysite.com?album = 12345 我可以用这个url显示一个弹出窗口来分享这个。 因此,如果您转到此网址,则会根据网址参数自动加载内容。
在这个地方(你可以看到带有参数的网址?album = 12345)我也希望显示“喜欢”按钮。 (我生成了url,所以我在代码中使用它:)
echo '<div style="overflow:visable" class="fb-like" data-href="http://mysite.com/?album='.$albumid.'" data-send="false" data-width="300" data-show-faces="false">?</div>';
它到目前为止工作...(在我添加解析代码以启用按钮之后) 但是,like按钮采用默认元标记描述和标题等。 这张专辑或艺术家并不特别 - 所以它不是唯一的。
注意:如果我从标题中删除了meta [property = og:url],我可以使用?album参数将按钮反向链接到右侧URL。否则它将返回到网站mysite.com的默认根目录(这确实使得lint工具在缺失的元数据上给出错误)
我试图将相同的功能添加到:
$("meta[property=og\\:url]").attr("content", "http://mysite.com/?album=<?php echo $albumid; ?>");
$("meta[property=og\\:title]").attr("content", "<?php echo $artistname; ?>");
$("meta[property=og\\:description]").attr("content", "<?php echo $albumname; ?>");
我这样做了所以meta标签会被更改,只是为了让like按钮显示正确的描述等。但这不起作用。 据我所知facebook刮擦页面(我使用了lint工具等),但我永远不会执行javascript,所以meta标签将保持默认状态(首次加载页面时)
我可以做一个独特的按钮,用它自己的描述(albumname等),而不为每个按钮创建一个html页面(数据库中数百万张专辑......)
我希望这是有道理的。
我似乎无法想出这个,请帮助: - )
根据以下评论,我使用了以下解决方案:
当打开url(使用params?alb_id = 12345)时,您应该创建正确的fb元标记。 这就足以让按钮完成它的工作。
答案 0 :(得分:0)
我可以做一个独特的按钮,用它自己的描述(albumname等),而不为每个按钮创建一个html页面(数据库中数百万张专辑......)
你不能,因为Open Graph对象是 URL(分别由他们的URL表示/识别 )。
一个URL ==一个Open Graph对象。
但是每张专辑有一个网址的问题在哪里?由于它都使用参数,所以不像你必须手动为每个专辑URL创建一个页面......
答案 1 :(得分:0)
您的逻辑很好,直到您使用jquery设置元标记。 它们应该使用PHP设置。你可以想象刮刀不会执行jquery,但如果它已经提供了已经PHP定制的元标记,它将使用它们(如提供的那样)。
只需要在服务器端准备og:标签,具体取决于所请求的albumId,它应该可以工作。它可能不会立即起作用,我记得之前曾经有过刮刀的偶尔缓存问题。
简而言之,index.php?album = 123将向scraper发送一组不同的og:标签,而不是index.php?album = 321。只需在服务器端设置它们。
<meta property="og:title" content="<?php echo $artistTitle; ?>"/>