web-dev-qa-db-fra.com

Comment générer une méta "og: image" pour le partage sur Facebook lorsque l'image de l'article n'est pas en vedette?

J'ai un morceau de code dans le fichier header.php de mon site Web qui peut générer des métadonnées d'image pour le partage de FB. Cela fonctionne parfaitement lorsque le message donné a une image sélectionnée.

<?php $fb_image = wp_get_attachment_image_src(get_post_thumbnail_id( get_the_ID() ), '480'); ?>
<?php if ($fb_image) : ?>
  <meta property="og:image" content="<?php echo $fb_image[0]; ?>" />
<?php endif; ?>

Je vous serais reconnaissant de bien vouloir me dire comment modifier (ou remplacer) ce code pour obtenir une balise méta og: image, même si le message contient une ou plusieurs photos, mais aucune d’elles n’est définie comme telle.

1
akopacsi

Comme cela a déjà été dit, Facebook détecte automatiquement les images si la balise d'image OG est manquante. Toutefois, dans certains cas, il est possible que d'autres images soient détectées (par exemple, pas à partir de votre publication, mais à partir d'un autre contenu).

Dans ce cas, il peut être utile de récupérer une liste de toutes les images attachées au message et d’utiliser celle que vous aimez ou, comme vous le suggérez, la première. L'exemple ci-dessous récupère la première pièce jointe de la publication en utilisant get_posts , puis récupère la vignette associée et affiche l'URL de l'image. Vous pouvez utiliser l'URL de l'image, stockée dans $thumbnail[0], ainsi que sa largeur et sa hauteur, qui sont stockées dans $thumbnail[1] et $thumbnail[2], respectivement.

$images = get_posts( array(
    'post_parent'       => get_the_ID(),
    'post_type'         => 'attachment',
    'numberposts'       => 1, // Single attachment
    'post_status'       => null,
    'post_mime_type'    => 'image', // Only images
    'orderby'           => 'post_date',
    'order'             => 'ASC'
) );

if ( ! empty( $images ) ) {
    $thumbnail = wp_get_attachment_image_src( $images[0]->ID, 'thumbnail' );
    echo $thumbnail[0];
}

Gardez à l'esprit que ce code ne récupère pas la première image qui est dans le message en tant que tel, mais la première pièce jointe au message qui est une image. Dans la plupart des cas, ces deux éléments sont identiques (si vous ne joignez pas d’images à vos publications autrement que pour les insérer dans le contenu de la publication, elles sont identiques).

4
engelen