I have spend some time trying to figure out how to display caption of Featured image below.
In caption I have saved Copyright data and I need to show it below every image.
There is no function for that and here is my solution:
$thumb_img = get_post( get_post_thumbnail_id() ); // Get post by ID echo $thumb_img->post_excerpt; // Display Caption echo $thumb_img->post_content; // Display Description
Images are save just like a regular post as a post type ‘attachment’, and data you enter in Media Library under caption are saved like standard WP Post Object, en example in my case is:
WP_Post Object ( [ID] => 32 [post_author] => 1 [post_date] => 2014-01-28 13:25:05 [post_date_gmt] => 2014-01-28 13:25:05 [post_content] => Description [post_title] => my-image [post_excerpt] => Some Caption [post_status] => inherit [comment_status] => open [ping_status] => open [post_password] => [post_name] => my-image [to_ping] => [pinged] => [post_modified] => 2014-01-28 13:25:05 [post_modified_gmt] => 2014-01-28 13:25:05 [post_content_filtered] => [post_parent] => 26 [guid] => http://localhost/wp/wp-content/uploads/my-image.jpg [menu_order] => 0 [post_type] => attachment [post_mime_type] => image/jpeg [comment_count] => 0 [filter] => raw )
To get ‘Alternative Text’, you would need to use other function get_post_meta($id).
In my case:
$thumb_img = get_post_meta( get_post_thumbnail_id() ); // Get post meta by ID echo $thumb_img['_wp_attachment_image_alt']['0']; // Display Alt text
Which will return something like this:
Array ( [_wp_attached_file] => Array ( [0] => 2014/01/my-image.jpg ) [_wp_attachment_metadata] => Array ( [0] => a:5:{s:5:"width";i:1440;s:6:"height";i:900;s:4:"file";s:57:"2014/01/my-image.jpg";s:5:"sizes";a:10:{s:9:"thumbnail";a:4:{s:4:"file";s:55:"my-image-98x98.jpg";s:5:"width";i:98;s:6:"height";i:98;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:57:"my-image-300x187.jpg";s:5:"width";i:300;s:6:"height";i:187;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:58:"my-image-1024x640.jpg";s:5:"width";i:1024;s:6:"height";i:640;s:9:"mime-type";s:10:"image/jpeg";}s:10:"fwc_slider";a:4:{s:4:"file";s:57:"my-image-440x275.jpg";s:5:"width";i:440;s:6:"height";i:275;s:9:"mime-type";s:10:"image/jpeg";}s:15:"fwc_slide_thumb";a:4:{s:4:"file";s:55:"my-image-80x44.jpg";s:5:"width";i:80;s:6:"height";i:44;s:9:"mime-type";s:10:"image/jpeg";}s:13:"stadium_thumb";a:4:{s:4:"file";s:55:"my-image-84x49.jpg";s:5:"width";i:84;s:6:"height";i:49;s:9:"mime-type";s:10:"image/jpeg";}s:22:"stadium_carousel_thumb";a:4:{s:4:"file";s:56:"my-image-120x70.jpg";s:5:"width";i:120;s:6:"height";i:70;s:9:"mime-type";s:10:"image/jpeg";}s:14:"wm_girls_thumb";a:4:{s:4:"file";s:57:"my-image-115x115.jpg";s:5:"width";i:115;s:6:"height";i:115;s:9:"mime-type";s:10:"image/jpeg";}s:10:"news_thumb";a:4:{s:4:"file";s:57:"my-image-220x110.jpg";s:5:"width";i:220;s:6:"height";i:110;s:9:"mime-type";s:10:"image/jpeg";}s:10:"city_thumb";a:4:{s:4:"file";s:56:"my-image-120x90.jpg";s:5:"width";i:120;s:6:"height";i:90;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}} ) [_edit_lock] => Array ( [0] => 1392886101:1 ) [_edit_last] => Array ( [0] => 1 ) [_wp_attachment_image_alt] => Array ( [0] => Alt Text ) )
Here’s how I do it:
function get_post_thumbnail_field( $field = ‘caption’, $post_id = NULL, $suppress_filters = FALSE ) {
$attachment_id = get_post_thumbnail_id( $post_id );
if ( $attachment_id ) {
$data = wp_prepare_attachment_for_js( $attachment_id );
$field = $data[$field];
if ( $suppress_filters ) return $field;
return apply_filters(‘get_post_thumbnail_field’, $field);
}
return NULL;
}
function the_post_thumbnail_field( $field = ‘caption’, $post_id = NULL, $suppress_filters = FALSE ) {
echo get_post_thumbnail_field( $field, $post_id, $suppress_filters );
}
Thanks for share, will add it to snippet.
I did not had to use it much, but when I did first time, I had trouble finding where is data stored.
Hi, I am new to wordpress and php etc.
This is extremly very nice post for me.
Thanks a lot………………….. Bobz
Can you tell me.. how to get size, resolution, and file name of attached image of current post….
You should check some other functions, for example wp_get_attachment_metadata
Hello Bobz,
I just tried your code, and it’s works. I also have a question with your code but I am not programmer, how to show all attachment images alt from children.
Thanks
Thanks for sharing.
As for size and other elements, caption can also be fetched using wp_get_attachment_metadata http://codex.wordpress.org/Function_Reference/wp_get_attachment_metadata :
$attachment_ID = ‘the image ID’;
$img_meta = wp_get_attachment_metadata( $attachment_ID );
$img_caption = $img_meta[‘image_meta’][‘caption’];
That’s cool, but i need to know how to add alt text:
$attachment = array(
‘post_mime_type’ => $wp_filetype[‘type’],
‘post_title’ => $title,
‘post_excerpt’ => $title,
‘post_content’ => $title,
‘post_status’ => ‘inherit,
// Tested:
‘_wp_attachment_image_alt’ => “wp image alt”,
‘attachment_image_alt’ => “a image alt”,
‘image_alt’ => “image alt”,
‘post_alt’ => “post alt”,
);
I think you should do it with
update_post_meta( $att_id, '_wp_attachment_image_alt', 'new alt value' );
It works! Good job… Thanks :-D
Great, it works!! Thank you!! *thumbs up*
Glad I can help.
Cheers
This helped me a lot.
Thank you very much!
Glad you found it helpful