我正在尝试将动态Facebook og元标记添加到我的Wordpress网站。我将它们添加到single.php而不是通常推荐的functions.php文件,因为我的代码低于我创建的Facebook应用程序,每次有人查看单个博客帖子时都需要执行,因为它会发布到他们的Facebook时间表,他们已经读过那篇特定的帖子。我不想使用插件,因为我的一些插件过去常常相互冲突,弄清楚它是一团糟。我最大的问题是我需要og:url
标记是动态的,但og:title
,og:description
,og:image
等也应如此。这是我在single.php文件顶部的代码:
<?php
$params = array();
if(count($_GET) > 0) {
$params = $_GET;
} else {
$params = $_POST;
}
// defaults
if($params['type'] == "") $params['type'] = "picture";
if($params['locale'] == "") $params['locale'] = "en_US";
if($params['description'] == "") $params['description'] = "Visit Internet LOLs for the funniest humor on the web! :)";
?>
<!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# internetlolsapp: http://ogp.me/ns/fb/internetlolsapp#">
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<!-- Open Graph meta tags -->
<meta property="fb:app_id" content="378076268920252" />
<meta property="og:site_name" content="meta site name"/>
<meta property="og:url" content="<?php echo 'http://internetlols.com'.$_SERVER['REQUEST_URI']; ?>"/>
<meta property="og:type" content="internetlolsapp:<?php echo $params['type']; ?>"/>
<meta property="og:description" content="<?php echo $params['description']; ?>"/>
</head>
</html>
<script type="text/javascript">
function postView()
{
FB.api(
'/me/internetlolsapp:view',
'post',
{ picture: '<?php echo 'http://internetlols.com'.$_SERVER['REQUEST_URI']; ?>' },
function(response) {
if (!response) {
// FAIL GRACEFULLY alert('Error occurred : No Response');
} else if (response.error) {
// FAIL GRACEFULLY alert('Error occurred : ' + response.error);
} else {
// SUCCESS alert('View was successful! Action ID: ' + response.id);
}
});
}
</script>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '378076268920252', // App ID
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
</body>
<body onload='postView()'>
</html>
我正在尝试按照此处的代码:Generating Facebook Open Graph meta tags dynamically 每当我阅读博客文章时,它都会发布到我的Facebook时间线,但是对于标题,它当然会发布“默认标题”,当我点击我的Facebook时间线上的“默认标题”链接时,它会将我发送到单个URL .php在URL的末尾有一堆废话
http://MYSITE.com/wp-content/themes/twentyeleven/single.php?fb_action_ids=10151048340001514&fb_action_types=internetlolsapp%3Aview&fb_source=other_multiline
而不是博客帖子网址。我想知道它是否与我在“FB.api”之后放在第3行的URL有关,但是我尝试放在那里的任何其他内容都阻止了应用程序在我的Facebook时间轴上发布任何内容一篇博文。
任何想法如何解决这个问题?我已经把头发拉了好几天了。非常感激任何的帮助!提前谢谢。
答案 0 :(得分:2)
我使用Facebook特色图片和开放图形元标记(http://www.ryanscowles.com)修改了一个功能并将其粘贴在functions.php上,它有效! (wordpress 3.5.1)
<?php
//function to limit description to 300 characters
function limit($var, $limit) {
if ( strlen($var) > $limit ) {
return substr($var, 0, $limit) . '...';
}
else {
return $var;
}
}
// Set your Open Graph Meta Tags
function fbogmeta_header() {
if (is_single()) {
//getting the right post content
$postsubtitrare = get_post_meta($post->ID, 'id-subtitrare', true);
$post_subtitrare = get_post($postsubtitrare);
$content = limit(strip_tags($post_subtitrare-> post_content),297);
?>
<meta property="og:title" content="<?php the_title(); ?>"/>
<meta property="og:description" content="<?php echo $content; ?>" />
<meta property="og:url" content="<?php the_permalink(); ?>"/>
<?php $fb_image = wp_get_attachment_image_src(get_post_thumbnail_id( get_the_ID() ), 'thumbnail'); ?>
<?php if ($fb_image) : ?>
<meta property="og:image" content="<?php echo $fb_image[0]; ?>" />
<?php endif; ?>
<meta property="og:type" content="<?php
if (is_single() || is_page()) { echo "article"; } else { echo "website";} ?>"
/>
<meta property="og:site_name" content="<?php bloginfo('name'); ?>"/>
<?php
}
}
add_action('wp_head', 'fbogmeta_header');
?>
答案 1 :(得分:1)
使用Wordpress,您无需通过$_GET
或$_POST
传递此信息。 Wordpress让所有这些都可以使用。
我可以理解你不想使用插件的愿望,但其中一些像Wordpress SEO或官方Facebook可以为你添加这些,让你的生活更轻松。如果没有,找一个简单的,把它拆开看看他们在做什么。
如果你真的想自己动手,你应该使用template tags设置标题。您可以通过the_title()功能检索帖子标题。您正在寻找的其他元数据点还有其他一些。
最后一点:您的og:image
文件需要至少50px一边或Facebook不会显示它。像你试图使用的Favicon几乎总是太小。有关完整的图像规格,请参阅this page。
答案 2 :(得分:1)
为了它的价值,我使用Ryan S. Cowles的功能来做到这一点并且它完美无缺。它使用wp_head钩子动态插入数据,使每个页面动态加载OG元信息。只要在FB状态框中使用了其中一个页面链接,它就会调用与该页面相关的信息。我在所有页面上都使用了精选图像,但如果不这样做,则可以轻松编写默认的后备版本。
这是在我的函数文件中:
/*
Plugin Name: Facebook Featured Image and Open Graph Meta Tags
Version: 1.0
Plugin URI: http://www.ryanscowles.com
Description: Automatically set the posts' Featured Image as the thumbnail and set appropriate Open Graph meta tags for sharing on Facebook.
Author: Ryan S. Cowles
Author URI: http://www.ryanscowles.com
*/
define ('pluginDirName', 'fb-featured-image');
// Allow for Facebooks's markup language
add_filter('language_attributes', 'add_og_xml_ns');
function add_og_xml_ns($content) {
return ' xmlns:og="http://ogp.me/ns#" ' . $content;
}
add_filter('language_attributes', 'add_fb_xml_ns');
function add_fb_xml_ns($content) {
return ' xmlns:fb="https://www.facebook.com/2008/fbml" ' . $content;
}
// Set your Open Graph Meta Tags
function fbogmeta_header() {
if (is_single()) {
?>
<meta property="og:title" content="<?php the_title(); ?>"/>
<meta property="og:description" content="<?php echo strip_tags(get_the_content($post->ID)); ?>" />
<meta property="og:url" content="<?php the_permalink(); ?>"/>
<?php $fb_image = wp_get_attachment_image_src(get_post_thumbnail_id( get_the_ID() ), 'thumbnail'); ?>
<?php if ($fb_image) : ?>
<meta property="og:image" content="<?php echo $fb_image[0]; ?>" />
<?php endif; ?>
<meta property="og:type" content="<?php
if (is_single() || is_page()) { echo "article"; } else { echo "website";} ?>"
/>
<meta property="og:site_name" content="<?php bloginfo('name'); ?>"/>
<?php
}
}
add_action('wp_head', 'fbogmeta_header');
答案 3 :(得分:0)
制作og:url
&amp; og:title
动态,请尝试使用此
<meta property="og:url" content="<?php echo get_permalink($post->ID); ?>"/>
<meta property="og:title" content="<?php echo $post->post_title; ?>"/>
还有其他可通过$post
对象获取的数据。有关详细信息,请参阅此处http://www.rlmseo.com/blog/wordpress-post-variable-quick-reference/
答案 4 :(得分:0)
我最终通过使用以下代码行来解决它,以使Facebook og:url标签动态:
<meta property="og:url" content="<?php echo 'http://internetlols.com'.$_SERVER['REQUEST_URI']; ?>"/>
{ picture: '<?php echo 'http://internetlols.com'.$_SERVER['REQUEST_URI']; ?>' },