WordPress Media Upload Plugin 3.5 JS PHP
-
I have a small issue creating a small plugin. I am trying to achieve a gallery meta box using Media Upload 3.5.
At this point I am able to upload images, but when trying to update the image. I wont get the same Post->ID as the Attachments (I strongly believe this is where the issue is at.) Perhaps I am doing something wrong with the shortcode api snippet or the way I’m passing my data.
Above is the code for the js and some functions. If it helps I used “shibashake” WordPress Media Manager as a Starting Point.
function media_view_settings( $settings, $post ) { $shortcode = '[gallery '; $ids = get_post_meta( $post->ID, 'gallery_ids', TRUE ); $ids = array(0); if ( is_array( $ids ) ) { $shortcode .= 'ids="' . implode( ',', $ids ) . '"]'; } else { $shortcode .= 'id="' . $post->ID . '"]'; } $settings['Gallery'] = array('shortcode' => $shortcode); return $settings; } function metabox( $post ) { global $post; wp_nonce_field( 'gallery', 'gallery_nonce'); $gallery = get_post_meta( $post->ID); echo '<div id="gallery-container">'; echo '<p>' . do_shortcode( '[gallery ids="' . $gallery[ 'gallery_ids' ][0] . '" link="none"]' ) . '</p>'; echo '<p><a href="#" id="open-media" class="button button-primary" title="' . esc_attr__( 'Add Media', 'gallery-meta-box' ) . '">' . __( 'Add Media', 'gallery-meta-box' ) . '</a></p>'; echo '<p><input type="hidden" id="gallery_ids" value="' . $gallery[ 'gallery_ids' ]. '" /></p>'; echo '</div>'; } public function save_content( $post_id ) { // Checks save status $is_autosave = wp_is_post_autosave( $post_id ); $is_revision = wp_is_post_revision( $post_id ); $is_valid_nonce = ( isset( $_POST[ 'gallery_nonce' ] ) && wp_verify_nonce( $_POST[ 'gallery_nonce' ], 'gallery' ) ) ? 'true' : 'false'; // Exits script depending on save status if ( $is_autosave || $is_revision || !$is_valid_nonce ) { return; } // Checks for input and sanitizes/saves if needed if( isset( $_POST[ 'gallery_ids' ] ) ) { update_post_meta( $post_id, 'gallery_ids', sanitize_text_field( $_POST[ 'gallery_ids' ] ) ); } }
JS
jQuery(document).ready(function(){ wp.media.GalleryMetabox = { frame: function() { if ( this._frame ) return this._frame; var selection = this.select(); this._frame = wp.media({ id: 'my-frame', frame: 'post', state: 'gallery-edit', title: wp.media.view.l10n.editGalleryTitle, editing: true, multiple: true, selection: selection, }); this._frame.on( 'update', function() { var controller = wp.media.GalleryMetabox._frame.states.get('gallery-edit'); var library = controller.get('library'); // Need to get all the attachment ids for gallery var ids = library.pluck('id'); // AJAX send (isn't currently working) wp.media.post( 'GalleryMetabox-update', { nonce: wp.media.view.settings.post.nonce, html: wp.media.GalleryMetabox.link, post_id: wp.media.view.settings.post.id, ids: ids }).done( function() { window.location = wp.media.GalleryMetabox.link; }); /* // Turn off refreshContent callback so we do not throw a null error controller.off('reset'); */ // Send the attachment URL to our custom input field via jQuery. jQuery('#gallery_ids').val( ids ); }); return this._frame; }, // Gets initial gallery-edit images. Function modified from wp.media.gallery.edit:513 // in wp-includes/js/media-editor.js.source.html select: function() { var shortcode = wp.shortcode.next( 'gallery', wp.media.view.settings.Gallery.shortcode ), defaultPostId = wp.media.gallery.defaults.id, attachments, selection, state; // Bail if we didn't match the shortcode. if ( ! shortcode ) return; // Ignore the rest of the match object. shortcode = shortcode.shortcode; if ( _.isUndefined( shortcode.get('id') ) && ! _.isUndefined( defaultPostId ) ) { shortcode.set( 'id', defaultPostId ); } attachments = wp.media.gallery.attachments( shortcode ); //console.log(attachments.models); selection = new wp.media.model.Selection( attachments.models, { props: attachments.props.toJSON(), multiple: true }); selection.gallery = attachments.gallery; // Fetch the query's attachments, and then break ties from the // query to allow for sorting. selection.more().done( function() { // Break ties with the query. selection.props.set({ query: false }); selection.unmirror(); selection.props.unset('orderby'); }); return selection; }, init: function() { jQuery('#open-media').click( function( event ) { event.preventDefault(); wp.media.GalleryMetabox.frame().open([0]); }); } }; jQuery(document).ready(function(){ jQuery( wp.media.GalleryMetabox.init ); });
Thanks
[ No bumping please. ]
- The topic ‘WordPress Media Upload Plugin 3.5 JS PHP’ is closed to new replies.