web-dev-qa-db-fra.com

récupérer des tailles d'image personnalisées à partir d'un objet javascript du chargeur de média

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();
});
5
Norcross

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.

7
Norcross