WordPress Post featured image URL in the header

I want to add the featured image URL of a post to the header. When a Facebook user shares a WordPress page, this code in the header:

The rel="image_src" attribute is what facebook is searching for.

Read More
<link rel="image_src" href="FEATUREDIMAGEURL">

Will return a specific image for the share. However, I cannot figure out how to add the URL of the post’s featured image… Can you?

I tried this:

<?php if (has_post_thumbnail( $post->ID ) ): ?>
<?php $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ); ?>
<link rel="image_src" href="<?php echo $image; ?>">
<?php endif; ?>

But it gave me a Parse error: syntax error, unexpected ';' error.

Related posts

Leave a Reply

2 comments

  1. To answer this one and point to the real problem:

    As the <head> HTML tag comes far before the actual loop, you’ll need something else than the global $post.

    get_queried_object();
    get_queried_object_id();
    

    The plugin

    The code is tested and works.

    As you might want to keep this functionality when switching themes, I’d suggest wrapping it up in a plugin.

    So the actual plugin should be something around the following lines:

    <?php
    /** Plugin Name: (#70215) »kaiser« Post Thumbnail image for FB */
    function wpse70215_fb_img()
    {
        // Not on a single page or post? Stop here.
        if ( ! is_singular() )
            return;
    
        $post_ID = get_queried_object_id();
    
        // We got no thumbnail? Stop here.
        if ( ! has_post_thumbnail( $post_ID ) )
            return;
    
        // Get the Attachment ID
        $att_ID = get_post_thumbnail_id( $post_ID );
    
        // Get the Attachment
        $att    = wp_get_attachment_image_src( $att_ID );
    
        printf(
             '<link rel="image_src" href="%s">'
            ,array_shift( $att )
        );
    }
    add_action( 'wp_head', 'wpse70215_fb_img' );
    
  2. there was a closing bracket missing in the second line; and you need to reference the first array element of $image:

    <?php if (has_post_thumbnail( $post->ID ) ): ?> 
    <?php $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ) ); ?> 
    <link rel="image_src" href="<?php echo $image[0]; ?>"> 
    <?php endif; ?> 
    

    http://codex.wordpress.org/Function_Reference/wp_get_attachment_image_src

    you might also want to add a check for single post or page, to avoid any unwanted output in index or archive pages; example:

    <?php if ( has_post_thumbnail( $post->ID ) && is_singular() ): ?>