php - Wordpress PHP 中的动态 Facebook og 元标签

标签 php facebook wordpress meta-tags

我正在尝试将动态 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

而不是博客文章 URL。我想知道它是否与我在“FB.api”之后的第 3 行中放置的 URL 有任何关系,但我尝试放置在那里的任何其他内容都会阻止应用程序在我阅读时在我的 Facebook 时间轴上发布任何内容一篇博文。

有什么解决办法吗?这几天我一直在拔头发。非常感激任何的帮助!提前致谢。

最佳答案

无论其值(value)如何,我都使用了 Ryan S. Cowles 的一个函数来执行此操作,并且它运行良好。它使用 wp_head Hook 动态插入数据,使每个页面都动态加载 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');

关于php - Wordpress PHP 中的动态 Facebook og 元标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11075694/

相关文章:

php - 在 ASP.NET 和 WordPress 之间共享身份验证

php - 错误 "PHP Fatal error: cannot call overloaded function for non-object"是什么意思?

php - preg_match 获取包含 123 和 .txt 之间任何字符的文件?

php - 无法 Eloquent 自动创建连接

php - 如何计算电脑游戏中的击杀/死亡率?

ios - 如何从 ShareKit 获取 Facebook ID

javascript - 将对话框发送给多个硬编码的 friend

wordpress - 自定义 Wordpress 用户类型

ios - 验证 Facebook/Twitter 连接的最佳实践。 (防止逆向工程 key )

javascript - WordPress 自定义字段单选按钮无法选中