2012-06-17 12 views
7

Sto cercando di aggiungere i tag meta di Facebook dinamici al mio sito Wordpress. Li sto aggiungendo a single.php invece del file functions.php di solito consigliato perché ho il codice sotto quello per un'app Facebook che ho creato che deve essere eseguito ogni volta che qualcuno visualizza un post di un singolo blog perché quindi pubblica il suo Facebook cronologia che hanno letto quel particolare post. Non voglio usare un plug-in perché alcuni dei miei plugin erano in conflitto tra loro ed era un disastro quello di chiarirlo. Il mio problema più grande è che ho bisogno del tag og:url per essere dinamico, anche se lo og:title, og:description, og:image, ecc. Dovrebbero essere ugualmente. Ecco il codice che ho nella parte superiore del mio file single.php:Dynamic Facebook o Meta Tags in Wordpress PHP

MODIFICA: QUI È IL CODICE DI LAVORO CHE STO ORA UTILIZZANDO. Grazie per l'aiuto di tutti:

<?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> 

Sto cercando di seguire il codice che si trova qui: Generating Facebook Open Graph meta tags dynamically e lo fa Pubblica sul mio timeline di Facebook ogni volta che leggo un post sul blog, ma per il titolo di messaggi corso "titolo predefinito "e quando clicco 'l'anello di default titolo' sulla mia timeline di Facebook, che mi manda all'URL per single.php con un mucchio di sciocchezze alla fine dell'URL

http://MYSITE.com/wp-content/themes/twentyeleven/single.php?fb_action_ids=10151048340001514&fb_action_types=internetlolsapp%3Aview&fb_source=other_multiline 

anziché l'URL post sul blog . Mi chiedo se abbia qualcosa a che fare con l'URL che ho inserito nella terza riga dopo "FB.api", ma qualsiasi altra cosa ho provato a mettere lì impedisce all'applicazione di pubblicare qualcosa sulla mia timeline di Facebook quando leggo un post sul blog.

Qualche idea su come risolvere questo problema? Mi sto strappando i capelli per giorni con questo. Qualsiasi aiuto sarebbe più apprezzato! Grazie in anticipo.

risposta

1

Con Wordpress, non è necessario passare queste informazioni tramite $_GET o $_POST. Wordpress rende tutto questo a tua disposizione.

Riesco a capire il tuo desiderio di non utilizzare un plug-in, ma alcuni di essi come Wordpress SEO o Facebook ufficiale possono aggiungere questo per te e rendere la tua vita molto più semplice. In caso contrario, trovarne uno semplice e smontarlo per vedere cosa stanno facendo.

Se si desidera eseguire personalmente il rollover, è necessario impostare il titolo utilizzando template tags. È possibile recuperare il titolo di un post tramite la funzione the_title(). Ce ne sono altri per gli altri punti di metadati che stai cercando.

Una nota finale: il file og:image deve essere di almeno 50 px su un lato o Facebook non lo visualizza. Un Favicon, come stai cercando di usare, è quasi sempre troppo piccolo. Vedere this page per le specifiche dell'immagine completa.

0

per rendere il og:url & og:title dinamica, provare a utilizzare questa

<meta property="og:url" content="<?php echo get_permalink($post->ID); ?>"/> 
<meta property="og:title" content="<?php echo $post->post_title; ?>"/> 

C'è anche altri dati che è disponibili tramite l'oggetto $post. Vedi qui per maggiori informazioni http://www.rlmseo.com/blog/wordpress-post-variable-quick-reference/

+0

usare 'esc_attr()'! – sam

0

ho finito per risolverlo utilizzando le seguenti righe di codice per rendere l'Facebook og: tag url dinamica:

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

{ picture: '<?php echo 'http://internetlols.com'.$_SERVER['REQUEST_URI']; ?>' }, 
+0

Per qualche motivo questo non funziona per me. L'ho fatto con javascript (scegliendo casualmente un'immagine per og: image property). ma non si sta aggiornando. qualche possibilità di sapere perché? – aleXela

1

Per quello che il suo valore, io uso una funzione da Ryan S. Cowles per fare questo e funziona perfettamente.Inserisce i dati dinamicamente con l'hook wp_head facendo in modo che ogni pagina carichi le meta informazioni OG in modo dinamico. Ogni volta che uno dei collegamenti della pagina viene utilizzato nella casella di stato FB, chiama le informazioni relative a quella pagina. Uso le immagini in primo piano su tutte le mie pagine, ma se non lo fai potresti facilmente scrivere in un fallback predefinito.

Questo è nel mio file funzioni:

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

ho adattato una funzione da Facebook presentazione Foto e Open Graph Meta Tag (http://www.ryanscowles.com) e incollato su functions.php, funziona! (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'); 
?>