2012-06-17 18 views
7

Estoy tratando de agregar meta tags dinámicos de Facebook a mi sitio de Wordpress. Los estoy agregando a single.php en lugar del usualmente recomendado archivo functions.php porque tengo un código debajo del que para una aplicación de Facebook que he creado y que debe ejecutarse cada vez que alguien ve una publicación de blog individual porque luego se publica en su Facebook línea de tiempo que han leído esa publicación en particular. No quiero usar un complemento porque algunos de mis complementos solían entrar en conflicto entre sí y era un desastre resolverlo. Mi mayor problema es que necesito que la etiqueta og:url sea dinámica, aunque og:title, og:description, og:image, etc. también deberían serlo. Aquí está el código que tengo en la parte superior de mi archivo single.php:Metabolismo dinámico de Facebook y metadatos en WordPress PHP

EDITAR: AQUÍ ES EL CÓDIGO DE TRABAJO QUE AHORA USO. GRACIAS POR LA AYUDA DE TODOS:

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

Estoy tratando de seguir el código que se encuentra aquí: Generating Facebook Open Graph meta tags dynamically y que publique a mi línea de tiempo de Facebook cada vez que leo un blog, pero por el título que de los puestos del curso "título predeterminado "y cuando hago clic en el 'enlace por defecto del título' en mi línea de tiempo de Facebook, me envía a la dirección URL de single.php con un montón de tonterías al final de la URL

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

en lugar de la URL de blog . Me pregunto si tiene algo que ver con la URL que puse en la tercera línea después de "FB.api", pero cualquier otra cosa que haya intentado poner allí impide que la aplicación publique algo en mi línea de tiempo de Facebook cuando leo una publicación de blog.

¿Alguna idea de cómo solucionar esto? He estado tirando de mi pelo por días con esto. ¡Cualquier ayuda sería muy apreciada! Gracias por adelantado.

Respuesta

1

Con Wordpress, no necesita pasar esta información a través de $_GET o $_POST. Wordpress pone todo esto a su disposición.

Puedo entender su deseo de no usar un complemento, pero algunos de ellos como Wordpress SEO o el Facebook oficial pueden agregar esto para usted y hacer su vida mucho más fácil. De lo contrario, encuentre uno simple y desmóntelo para ver qué están haciendo.

Si realmente desea hacer su propio rollo, debería establecer el título usando template tags. Puede recuperar un título de publicaciones a través de la función the_title(). Hay otros para los otros puntos de metadatos que estás buscando.

Una nota final: su archivo og:image debe tener al menos 50 píxeles en un lado o Facebook no lo mostrará. Un Favicon, como el que intentas usar, casi siempre es demasiado pequeño. Consulte this page para ver las especificaciones completas de la imagen.

0

Para hacer el og:url & og:title dinámica, intente utilizar este

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

También hay otros datos que es avilable a través del objeto $post. Ver aquí para más información http://www.rlmseo.com/blog/wordpress-post-variable-quick-reference/

+0

use 'esc_attr()'! – sam

0

terminé resolver mediante el uso de las siguientes líneas de código para hacer que el Facebook og: Etiquetas de URL dinámica:

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

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

Por alguna razón, esto no funciona para mí. Hice esto con javascript (seleccionando aleatoriamente una imagen para la propiedad og: image). pero no está actualizando. alguna oportunidad de saber por qué? – aleXela

1

Por lo que su valor, utilizo una función de Ryan S. Cowles para hacer esto y funciona perfectamente.Inserta los datos dinámicamente con el gancho wp_head haciendo que cada página cargue dinámicamente la metainformación OG. Cada vez que se utiliza uno de los enlaces de su página en el cuadro de estado de FB, llama a la información relacionada con esa página. Utilizo Featured Images en todas mis páginas, pero si no lo hace, podría escribir fácilmente en una reserva predeterminada.

Esto es en mi archivo de funciones:

/* 
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

Me adaptado en función de Facebook Foto y Open Graph Meta Tags (http://www.ryanscowles.com) y pegado en functions.php, funciona! (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'); 
?>