J'essaie d'obtenir les tailles d'image personnalisées que j'ai créées à l'aide de add_image_size
afin de les renvoyer dans l'objet javascript. Je sais comment les inclure dans la liste déroulante, mais je ne veux pas/n'ai pas besoin de ça.
L'objet actuel renvoie les valeurs par défaut (complet, grand, moyen et miniature) dans un tableau, mais aucune des tailles personnalisées.
Voici le code que j'utilise pour définir l'instance d'uploader
jQuery('input.guide-logo-upload').on('click', function( event ){
event.preventDefault();
// If the media frame already exists, reopen it.
if ( file_frame ) {
file_frame.open();
return;
}
// Create the media frame.
file_frame = wp.media.frames.file_frame = wp.media({
title: jQuery( this ).data( 'uploader_title' ),
button: {
text: jQuery( this ).data( 'uploader_button_text' )
},
multiple: false // force single file
});
// run the callback when selected
file_frame.on( 'select', function() {
// make sure to only deal with the first item
attachment = file_frame.state().get('selection').first().toJSON();
// WHERE ARE MY CUSTOM SIZES
console.log(attachment);
// Populate the field with the URL and show a preview below it
jQuery('input#g-logo').val( attachment.url );
jQuery('input#g-logo-id').val( attachment.id );
jQuery('p.logo-description').after( '<img class="logo-display logo-140" src="' + attachment.sizes.thumbnail.url + '">' );
jQuery('p.logo-description').after( '<img class="logo-display logo-350" src="' + attachment.sizes.medium.url + '">' );
});
// Finally, open the modal
file_frame.open();
});
grâce à un ami sur Twitter, j'ai réussi à faire fonctionner cela. Ci-dessous le code.
function wpse_110060_image_sizes_js( $response, $attachment, $meta ){
$size_array = array( 'custom_size_one', 'custom_size_two') ;
foreach ( $size_array as $size ):
if ( isset( $meta['sizes'][ $size ] ) ) {
$attachment_url = wp_get_attachment_url( $attachment->ID );
$base_url = str_replace( wp_basename( $attachment_url ), '', $attachment_url );
$size_meta = $meta['sizes'][ $size ];
$response['sizes'][ $size ] = array(
'height' => $size_meta['height'],
'width' => $size_meta['width'],
'url' => $base_url . $size_meta['file'],
'orientation' => $size_meta['height'] > $size_meta['width'] ? 'portrait' : 'landscape',
);
}
endforeach;
return $response;
}
add_filter ( 'wp_prepare_attachment_for_js', 'wpse_110060_image_sizes_js' , 10, 3 );
remarque: le tableau et foreach ne sont nécessaires que parce que j'ai deux éléments distincts à inclure. s'il n'y a que 1 à inclure, vous pouvez le supprimer.