Вопрос по wordpress, php, meta-tags, facebook – Динамический Facebook или мета-теги в Wordpress PHP

7

Я пытаюсь добавить динамические мета-теги og Facebook на мой сайт 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>

Я пытаюсь следовать коду, расположенному здесь:Динамическое создание мета-тегов Facebook Open Graph и он публикуется на моей временной шкале в Facebook всякий раз, когда я читаю сообщение в блоге, но для заголовка он, конечно, публикует & quot; название по умолчанию & quot; и когда я нажимаю & quot; название по умолчанию & quot; ссылка на мою временную шкалу Facebook, она отправляет меня на URL для single.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 поста в блоге. Мне интересно, имеет ли это какое-либо отношение к URL, который я указал в 3-й строке после "FB.api", но все, что я пытался добавить туда, не позволяет приложению вообще что-либо публиковать на моей временной шкале Facebook, когда я прочитайте сообщение в блоге.

Любые идеи, как это исправить? Я тянул свои волосы в течение нескольких дней с этим. Любая помощь будет наиболее ценится! Заранее спасибо.

Ваш Ответ

4   ответа
2

ph (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

$_GET или же$_POST, Wordpress делает все это доступным для вас.

Я понимаю ваше желание не использовать плагин, но некоторые из них, такие как Wordpress SEO или официальный Facebook, могут добавить это для вас и сделать вашу жизнь намного проще. Если нет, найдите простой и разберите его, чтобы посмотреть, что они делают.

Если вы действительно хотите бросить свой собственный, вы должны установить заголовок с помощьютеги шаблона, Вы можете получить заголовок сообщения черезthe_title () функция. Есть другие пункты для других точек метаданных, которые вы ищете.

Последнее замечание: Вашog:image размер файла должен быть не менее 50 пикселей на стороне, иначе Facebook его не отобразит. Фавикон, который вы пытаетесь использовать, почти всегда слишком мал. Увидетьэта страница для полной спецификации изображения.

1

я использую функцию от Райана С. Коулза, чтобы сделать это, и она отлично работает. Он вставляет данные динамически с помощью ловушки 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');
0

og:url & Амп;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/

использованиеesc_attr()!

Похожие вопросы