WordPress Media Uploader with size select
You could use the media insertion dialog as shown on the "edit page" site, which adds alignment, link_to and size input fields. To do so add frame: 'post'
to your options array:
file_frame = wp.media.frames.file_frame = wp.media({ title: 'Select a image to upload', button: { text: 'Use this image', }, multiple: false, frame: 'post', // <-- this is the important part state: 'insert',});
Instead of listening to the "select" event listen to the "insert" event. This code shows how retrieve the additional properties including the size:
// When an image is inserted, run a callback.file_frame.on( 'insert', function(selection) { var state = file_frame.state(); selection = selection || state.get('selection'); if (! selection) return; // We set multiple to false so only get one image from the uploader var attachment = selection.first(); var display = state.display(attachment).toJSON(); // <-- additional properties attachment = attachment.toJSON(); // Do something with attachment.id and/or attachment.url here var imgurl = attachment.sizes[display.size].url; jQuery( '#filenameFromURL' ).val( imgurl );});
I find some where in Internet. May be it useful.
attachment = custom_uploader.state().get('selection').first().toJSON();
With attachment you can working with:
- alt
- author
- caption
- compat ( <-- It is Object )
- item
- meta
- date
- dateFormatted
- description
- editLink
- filename
- height
- icon
- id
- link
- menuOrder
- mime
- modified
- name
- nonces ( <-- thi is object)
- delete
- update
- proto
- orientation
- sizes ( <-- this is object)
- full ( <-- this is object)
- height
- orientation
- url
- width
- proto
- medium ( <-- this is object)
- height
- orientation
- url
- width
- proto
- thumbnail ( <-- this is object)
- height
- orientation
- url
- width
- proto
- proto ( <-- this is object)
- full ( <-- this is object)
- status
- subtype
- title
- type
- uploadedTo
- url
- width
To solve your problem I suggest use with case 20 above:
input.prev('input').val(attchment.sizes.collage-large.url);
Hope this work!
You're VERY close. To make the size selectable within the admin panel, review the add_image_size Codex Entry:
add_filter( 'image_size_names_choose', 'my_custom_sizes' );function my_custom_sizes( $sizes ) { return array_merge( $sizes, array( 'your-custom-size' => __('Your Custom Size Name'), ) );}
So in your case, this should do what you need:
add_filter( 'image_size_names_choose', 'my_custom_sizes' );function my_custom_sizes( $sizes ) { return array_merge( $sizes, array( 'collage-large' => __('Collage Large'), 'collage-small' => __('Collage Small'), ) );}