web-dev-qa-db-ja.com

投稿内の画像がフィーチャーされていないときにFacebook共有用に "og:image"メタを生成する方法

私のWebサイトのheader.phpには、FB共有のためのog:imageメタデータを生成することができるコードがあります。指定された投稿におすすめの画像がある場合、それは完璧に機能します。

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

投稿に1枚以上の写真が含まれている場合でもog:imageメタタグを取得するようにこのコードを変更(または置換)する方法を教えていただければ幸いですが、それらのどれもフィーチャーとして設定されていません。

1
akopacsi

すでに述べたように、OG画像タグがないと、Facebookは自動的に画像を検出します。ただし、場合によっては、他の画像が検出されることがあります(たとえば、投稿からではなく他のコンテンツから)。

その場合は、投稿に添付されているすべての画像のリストを取得して、好みのものを使用するか、最初の画像を使用すると便利です。以下の例では、 get_posts を使用して投稿の最初の画像添付ファイルを取得してから、関連付けられているサムネイル画像を取得して画像のURLを表示します。 $thumbnail[0]に格納されている画像のURLと、その幅と高さをそれぞれ$thumbnail[1]$thumbnail[2]に格納して使用できます。

$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];
}

このコードは投稿自体にある最初の画像を取得するのではなく、投稿である最初の画像である画像を取得することに注意してください。ほとんどの場合、これら2つは同じです(投稿コンテンツに挿入する場合を除き、投稿に画像を添付していない場合、それらは同じです)。

4
engelen