Динамические Facebook и метатеги в WordPress PHP

Я пытаюсь добавить динамические теги Facebook og на мой сайт WordPress. Я добавляю их в файл single.php вместо обычно рекомендуемого файла functions.php, потому что у меня есть код ниже того, что для приложения Facebook, которое я создал, которое нужно выполнять каждый раз, когда кто-то просматривает отдельную запись в блоге, потому что затем он отправляется на свой Facebook что они прочли этот конкретный пост. Я не хочу использовать плагин, потому что некоторые из моих плагинов были в конфликте друг с другом, и это было беспорядок, чтобы разобраться. Моя самая большая проблема в том, что мне нужно, чтобы тег og:url был динамическим, хотя должны быть также og:title , og:description , og:image и т. Д. Вот код, который у меня есть в верхней части моего файла single.php:

EDIT: ЗДЕСЬ РАБОЧИЙ КОД, СЛЕДУЮЩИЙ СЕЙЧАС. СПАСИБО ДЛЯ КАЖДОЙ ПОМОЩИ:

  <?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 всякий раз, когда я читаю сообщение в блоге, но для заголовка он, естественно, публикует «заголовок по умолчанию» и когда я нажимаю кнопку " default title "на моей временной шкале 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, когда я читаю сообщение в блоге.

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

Related of "Динамические Facebook и метатеги в WordPress PHP"

Я адаптировал функцию из Facebook Featured Image и Open Graph Meta Tags ( 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'); ?> 

В WordPress вам не нужно передавать эту информацию через $_GET или $_POST . WordPress делает все это доступным для вас.

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

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

Окончательное примечание: ваш файл og:image должен быть не менее 50 пикселей на стороне, иначе Facebook не отобразит его. Favicon, как вы пытаетесь использовать, почти всегда слишком мала. См. Эту страницу для получения полного изображения.

Для чего это стоит, я использую функцию от Ryan S. Cowles, чтобы сделать это, и она отлично работает. Он динамически вставляет данные с помощью wp_head, заставляя каждую страницу загружать метаинформацию OG динамически. В любое время, когда одна из ссылок на страницы используется в поле статуса FB, она вызывает информацию, относящуюся к этой странице. Я использую Featured Images на всех моих страницах, но если вы этого не сделаете, вы можете легко написать в резервную копию по умолчанию.

Это в моем файле функций:

 /* 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'); 

Чтобы создать динамику 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/

Я решил решить это, используя следующие строки кода, чтобы сделать теги og: url:

 <meta property="og:url" content="<?php echo 'http://internetlols.com'.$_SERVER['REQUEST_URI']; ?>"/> { picture: '<?php echo 'http://internetlols.com'.$_SERVER['REQUEST_URI']; ?>' },