/** * == How to Use ? == * * 1. Load JS: * * function wpbc_register_js__media_upload( $hook ) { * if ( wpbc_can_i_load_on_this_page__media_upload() ) { * wpbc_load_js__required_for_media_upload(); * } * } * add_action( 'admin_enqueue_scripts', 'wpbc_register_js__media_upload' ); * * * 2. Inside the page use html element with this class: "wpbc_media_upload_button" * * * * 3. 'data-url_field' attribute define TEXT field, where will be inserted URL of selected image * 'data-modal_title' - Header title in popup * 'data-btn_title' - Button title in popup * * 4. If you need to update URL somewhere else at the page, use this j JavaScript hook: * * * */ var wpbc_media_file_frame; jQuery( document ).ready( function (){ //'use strict'; jQuery( '.wpbc_media_upload_button' ).on( 'click', function( event ) { var j_btn = jQuery( this ); var is_multi_selection = false; // var insert_field_separator = ','; // Stop the anchor's default behavior event.preventDefault(); // If frame exist close it if ( wpbc_media_file_frame ) { wpbc_media_file_frame.close(); } // ----------------------------------------------------------------------------------------------------- // Create Media Frame // ----------------------------------------------------------------------------------------------------- wpbc_media_file_frame = wp.media.frames.wpbc_media_upload_file_frame = wp.media( { // Check here ../wp-includes/js/media-views.js // Set the title of the modal. title: j_btn.data( 'modal_title' ), library: { // type: '' // type: [ 'video', 'image' ] type: [ 'image' ] }, button: { text: j_btn.data( 'btn_title' ), }, multiple: is_multi_selection, // states: [ // new wp.media.controller.Library( { // /* // Add to this libaray custom post parameter: $_POST['query'][ $media_uploader_params['key'] ] = $media_uploader_params['value'] // We are checking in functon wpbc_media_filter_posts_where media files that only relative to this medi Frame opening // And filtering posts (in WHERE) relative custom path to our files. // echo '{' . $media_uploader_params['key'] . ": '" . $media_uploader_params['value'] . "' }"; // */ // library: wp.media.query(), // multiple: is_multi_selection, // title: j_btn.data( 'modal_title' ), // priority: 15, // filterable: 'uploaded', // type: ['image'] // // idealColumnWidth: 125 // } ) // ] } ); /* /////////////////////////////////////////////////////////////////////// // Set custom parameters for uploader -> $_POST['wpbc_media_type'] - checking in "upload_dir", when filter_upload_dir /////////////////////////////////////////////////////////////////////// wpbc_media_file_frame.on( 'ready', function () { wpbc_media_file_frame.uploader.options.uploader.params = { type: 'wpbc_media_download', }; } ); */ /////////////////////////////////////////////////////////////////////// // When File have selected, do this /////////////////////////////////////////////////////////////////////// wpbc_media_file_frame.on( 'select', function () { if ( ! is_multi_selection ) { // Single file var attachment = wpbc_media_file_frame.state().get( 'selection' ).first().toJSON(); // Put URL of file to text field jQuery( '#' + j_btn.data( 'url_field' ) ).val( attachment.url ); jQuery( '#' + j_btn.data( 'url_field' ) ).trigger( "wpbc_media_upload_url_set" ); //j_btn.parents( '.wpbc_extra__excerpt_img' ).find( '.ui_group__thumbnail .wpbc_media_upload_button' ).html( '' ); } else { // Multiple files. var file_paths = ''; // var csv_data_line = ''; wpbc_media_file_frame.state().get( 'selection' ).map( function ( attachment ){ /* // Request new data attachment.fetch().then(function (data) { console.log(data); // preloading finished after this you can use your attachment normally // wp.media.attachment( attachment.id ).get('url'); }); */ attachment = attachment.toJSON(); /* if ( attachment.url ) { // Insert info from selected files csv_data_line = attachment.id + insert_field_separator + attachment.title + insert_field_separator + attachment.wpbc_media_version_num + insert_field_separator + attachment.description + insert_field_separator + attachment.url file_paths = file_paths ? file_paths + "\n" + csv_data_line : csv_data_line; } */ file_paths = file_paths ? file_paths + "\n" + attachment.url : attachment.url; }); jQuery( '#' + j_btn.data( 'url_field' ) ).val( file_paths ); jQuery( '#' + j_btn.data( 'url_field' ) ).trigger( "wpbc_media_upload_url_set" ); } } ); /* // Fires when a state activates. wpbc_media_file_frame.on( 'activate', function() { alert('activate'); } ); // Fires after the frame markup has been built, but not appended to the DOM. // @see wp.media.view.Modal.attach() wpbc_media_file_frame.on( 'ready', function() { alert('ready'); } ); // Fires when the frame's $el is appended to its DOM container. // @see media.view.Modal.attach() wpbc_media_file_frame.on( 'attach', function() { alert('attach'); } ); // Fires when the modal opens (becomes visible). // @see media.view.Modal.open() wpbc_media_file_frame.on( 'open', function() { alert('open'); } ); // Fires when the modal closes via the escape key. // @see media.view.Modal.close() wpbc_media_file_frame.on( 'escape', function() { alert('escape'); } ); // Fires when the modal closes. // @see media.view.Modal.close() wpbc_media_file_frame.on( 'close', function() { alert('close'); } ); // Fires when a user has selected attachment(s) and clicked the select button. // @see media.view.MediaFrame.Post.mainInsertToolbar() wpbc_media_file_frame.on( 'select', function() { var selectionCollection = wpbc_media_file_frame.state().get('select'); } ); // Fires when a mode is deactivated on a region { 'menu' | title | content | toolbar | router } wpbc_media_file_frame.on( 'content:deactivate', function() { alert('{region}:deactivate'); } ); // and a more specific event including the mode. wpbc_media_file_frame.on( 'content:deactivate:{mode}', function() { alert('{region}:deactivate{mode}'); } ); // Fires when a region is ready for its view to be created. wpbc_media_file_frame.on( 'content:create', function() { alert('{region}:create'); } ); // and a more specific event including the mode. wpbc_media_file_frame.on( 'content:create:{mode}', function() { alert('{region}:create{mode}'); } ); // Fires when a region is ready for its view to be rendered. wpbc_media_file_frame.on( 'content:render', function() { alert('{region}:render'); } ); // and a more specific event including the mode. wpbc_media_file_frame.on( 'content:render:{mode}', function() { alert('{region}:render{mode}'); } ); // Fires when a new mode is activated (after it has been rendered) on a region. wpbc_media_file_frame.on( 'content:activate', function() { alert('{region}:activate'); } ); // and a more specific event including the mode. wpbc_media_file_frame.on( 'content:activate:{mode}', function() { alert('{region}:activate{mode}'); } ); // Get an object representing the current state. //wpbc_media_file_frame.state(); // Get an object representing the previous state. //wpbc_media_file_frame.lastState(); */ /* // Debuge all events from media Frame! wpbc_media_file_frame.on( "all", function ( eventName ){ console.log( 'Frame Event: ' + eventName ); } ); // Debuge all events from media Frame! wp.media.model.Attachment.get( "collection" ).collection.on( "all", function ( eventName ){ console.log( '[Collection] Event: ' + eventName ); } ); wp.media.model.Attachment.get( "models" ).collection.on( "all", function ( eventName ){ console.log( '[models] Event: ' + eventName ); } ); wp.media.model.Attachment.get( "views" ).collection.on( "all", function ( eventName ){ console.log( '[views] Event: ' + eventName ); } ); */ // Open the modal. wpbc_media_file_frame.open(); }); });