Search code examples
javascriptjquerywordpressmediamultifile-uploader

How I can use WordPress Media Uploader with Multiple image upload Button


I'm a beginner in jQuery, Multiple image upload Button implement with WordPress Media Uploader is not working, I need to know how to do the right way.

Here's my code: Javascript/jQuery For displaying the media uploader and handling the selected images:

jQuery(document).ready( function($){

var mediaUploader;

$('#upload-button').on('click',function(e) {
    e.preventDefault();
    if( mediaUploader ){
        mediaUploader.open();
        return;
    }

  mediaUploader = wp.media.frames.file_frame =wp.media({
    title: 'Choose a Hotel Picture',
    button: {
        text: 'Choose Picture'
    },
    multiple:false
  });

  mediaUploader.on('select', function(){
    attachment = mediaUploader.state().get('selection').first().toJSON();
    $('#profile-picture').val(attachment.url);
    $('#profile-picture-preview').css('background-image','url(' + attachment.url + ')');
  });
  mediaUploader.open();
}); });




<input type="button" id="upload-button1" class="button button-secondary" value="Upload Profiel Picture">
<input type="hidden" name="profile_picture1" id="profile-picture1" value="'.$picture.'">

<input type="button" id="upload-button2" class="button button-secondary" value="Upload Profiel Picture">
<input type="hidden" name="profile_picture2" id="profile-picture2" value="'.$picture.'">

Any help, as always, is greatly appreciated.


Solution

  • You need to simply change from ID to Classes for your selectors in order to make the media uploader usable on different buttons.

    Then, you'll need to create an identifier in order to use the proper input filed to set the image. In my case, I used a data-attribute.

    jQuery(document).ready( function($){
    
    var mediaUploader;
    
    $('.upload-button').on('click',function(e) {
        e.preventDefault();
        var buttonID = $(this).data('group');
    
        if( mediaUploader ){
            mediaUploader.open();
            return;
        }
    
      mediaUploader = wp.media.frames.file_frame =wp.media({
        title: 'Choose a Hotel Picture',
        button: {
            text: 'Choose Picture'
        },
        multiple:false
      });
    
      mediaUploader.on('select', function(){
        attachment = mediaUploader.state().get('selection').first().toJSON();
        $('#profile-picture'+buttonID).val(attachment.url);
        $('#profile-picture-preview'+buttonID).css('background-image','url(' + attachment.url + ')');
      });
      mediaUploader.open();
    }); });
    
    
    
    
    <input type="button" class="button button-secondary upload-button" value="Upload Profile Picture" data-group="1">
    <input type="hidden" name="profile_picture1" id="profile-picture1" value="'.$picture1.'">
    
    <input type="button" class="button button-secondary upload-button" value="Upload Profile Picture" data-group="2">
    <input type="hidden" name="profile_picture2" id="profile-picture2" value="'.$picture2.'">