Usar El Media Uploader De WordPress 3.5

En WordPress 3.5 se ha reemplazado el cargador de medios y para utilizarlo podemos hacerlo utilizando el script debajo. Si aun usas el cargador de medios viejos reemplaza el wp_enqueue_script('media-upload'); por wp_enqueue_media();.

jQuery(document).ready(function() {

  // Uploading files
  var file_frame;
  var wp_media_post_id = wp.media.model.settings.post.id; // Store the old id
  var set_to_post_id = 10; // Set this

  jQuery('#upload_image_button').click(function(event) {
    event.preventDefault();

    // If the media frame already exists, reopen it.
    if ( file_frame ) {
    
      // Set the post ID to what we want
      file_frame.uploader.uploader.param( 'post_id', set_to_post_id );
    
      // Open frame
      file_frame.open();
      return;
    } else {
      // Set the wp.media post id so the uploader grabs the ID we want when initialised
      wp.media.model.settings.post.id = set_to_post_id;
    }
								 
    // 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 // Set to true to allow multiple files to be selected
    });

    // When an image is selected, run a callback.
    file_frame.on( 'select', function() {
  
      // We set multiple to false so only get one image from the uploader
      attachment = file_frame.state().get('selection').first().toJSON();

      // Do something with attachment.id and/or attachment.url here
      jQuery('#my-image-preview').attr('src', attachment.url);
      jQuery('#my-input').attr('value', attachment.url);
      jQuery('#my-form').submit();

      // Restore the main post ID
      wp.media.model.settings.post.id = wp_media_post_id;
    });
													 
    // Finally, open the modal
    file_frame.open();
  });
});

Para que funcione tienes que tener presente una estructa HTML como la siguiente, aunque no tiene que ser exactamente la misma:

<input id="my-input" name="my-input" type="text" />
<input id="upload_image_button" type="button" data-uploader_title="Title" data-uploader_button_text="Add Image" value="Upload" />

<img id="my-image-preview" src="" />