I want to upload the image and all generated thumbnails to another server (as backup). I only found add_attachment, but this is fired right after the image was uploaded and the postmeta table was updated.

I want to wait until all thumbnail sizes are generated and then take the files and upload them to the other server. Is there any hook which matches my expectations?

1
1

Thumbnails in WordPress can be generated by using wp_generate_attachment_metadata(), this function fires a filter after generating all the thumbnails wp_generate_attachment_metadata and the filter provides $metadata and $attachment_id to the hooked functions.

You can hook your custom function to this filter.

$metadata : Attachment metadata.
What you need is $metadata['sizes']['<size-name>'], the <size-name> is the name of thumbnail size added by add_image_size() or the default ones.
e.g.

$metadata[sizes] => Array
       (
           [thumbnail] => Array
               (
                   [file] => example_image-150x150.jpg
                   [width] => 150
                   [height] => 150
                   [mime-type] => image/jpeg
               )
           [medium] => Array
               (
                   [file] => example_image-4-300x194.jpg
                   [width] => 300
                   [height] => 194
                   [mime-type] => image/jpeg
               )
           [mysize] => Array
               (
                   [file] => example_image-4-400x400.jpg
                   [width] => 400
                   [height] => 400
                   [mime-type] => image/jpeg
               )
       )

from here you can know which sizes exist for the certain attachment, and only upload those sizes/thumbnails.

To get those thumbnails use a function like wp_get_attachment_image_src($id, $size_name) to retrieve the thumbnail urls.

(Optional) : Install the Force Regenerate Thumbnails plugin to rerun the wp_generate_attachment_metadata() for previously uploaded images too.

Leave a Reply

Your email address will not be published. Required fields are marked *