I have little problem with Media Uploader in new WordPress 3.5. I created own plugin which is upload the picture. I’m using this code JS:
<script type="text/javascript">
var file_frame;
jQuery('.button-secondary').live('click', function( event ){
event.preventDefault();
if ( file_frame ) {
file_frame.open();
return;
}
file_frame = wp.media.frames.file_frame = wp.media(
{
title: 'Select File',
button: {
text: jQuery( this ).data( 'uploader_button_text' )
},
multiple: false
}
);
file_frame.on('select', function() {
attachment = file_frame.state().get('selection').first().toJSON();
jQuery('#IMGsrc').val(attachment.url);
});
file_frame.open();
});
</script>
The code works fine, but unfortunately forms appears incomplete. When I select any picture doesn’t show me ‘Attachment Display Settings’ on right side. I don’t know why. I try add options to media:
displaySettings: true,
displayUserSettings: true
But it also doesn’t work.
Only Uploader
below a example code, works only on post edit page. If you will use also on other page, then include the function wp_enqueue_media()
, see the next headline.
jQuery(document).ready(function($) {
var _custom_media = true,
_orig_send_attachment = wp.media.editor.send.attachment;
$('.stag-metabox-table .button').click(function(e) {
var send_attachment_bkp = wp.media.editor.send.attachment;
var button = $(this);
var id = button.attr('id').replace('_button', '');
_custom_media = true;
wp.media.editor.send.attachment = function(props, attachment) {
if ( _custom_media ) {
$("#"+id).val(attachment.url);
} else {
return _orig_send_attachment.apply( this, [props, attachment] );
};
}
wp.media.editor.open(button);
return false;
});
$('.add_media').on('click', function() {
_custom_media = false;
});
});
Short explanation of Media Manager
-
At first include the relevant scripts, use the core function: wp_enqueue_media();
The function set up all the relevant settings, localizes menu text, and loads in all the appropriate javascript files.
You can add custom script via wp_enqueue_script()
.
// Also adds a check to make sure `wp_enqueue_media` has only been called once.
// @see: http://core.trac.wordpress.org/ticket/22843
if ( ! did_action( 'wp_enqueue_media' ) )
wp_enqueue_media();
Add also a default script for custom header: wp_enqueue_script( 'custom-header' );
This creates an image selection frame, and ties it to an interface element, for example a button or link. It then calls a url or our choice with the selected image id. This is the same script that is used when selecting theme custom header images.
-
Add the button to media manager:
<?php
$modal_update_href = esc_url( add_query_arg( array(
'page' => 'my_media_manager',
'_wpnonce' => wp_create_nonce( 'my_media_manager_options' ),
), admin_url( 'upload.php' ) ) );
?>
<p>
<a id="choose-from-library-link" href="#"
data-update-link="<?php echo esc_attr( $modal_update_href ); ?>"
data-choose="<?php esc_attr_e( 'Choose a Default Image' ); ?>"
data-update="<?php esc_attr_e( 'Set as default image' ); ?>"><?php _e( 'Set default image' ); ?>
</a> |
</p>
-
Define Action Function
last, you need to add in some code for processing the image id that we will pass to the data-update-link url.
// Add to the top of our data-update-link page
if ( isset($_REQUEST['file']) ) {
check_admin_referer( 'my_media_manager_options' );
// Process and save the image id
$options = get_option( 'my_media_manager_options', TRUE );
$options['default_image'] = absint( $_REQUEST['file'] );
update_option( 'my_media_manager_options', $options );
}
Sources and hints:
- http://codestag.com/how-to-use-wordpress-3-5-media-uploader-in-theme-options/
- http://mikejolley.com/2012/12/using-the-new-wordpress-3-5-media-uploader-in-plugins/
- https://github.com/AgencyPMG/PMG-WP-Core/commit/6a5a1ee818b9a8f03bf7df6e9f16b118f999355c
- Filter and Action Hooks: http://core.trac.wordpress.org/ticket/22186#comment:46