Make WordPress Core

Ticket #21776: 21776.7-refresh.diff

File 21776.7-refresh.diff, 21.2 KB (added by DrewAPicture, 12 years ago)

refresh at r22973

  • wp-includes/js/media-editor.js

     
    375375
    376376                        workflow = workflows[ id ] = wp.media( _.defaults( options || {}, {
    377377                                frame:    'post',
     378                                state:    'upload',
    378379                                title:    wp.media.view.l10n.addMedia,
    379380                                multiple: true
    380381                        } ) );
     
    427428                                }
    428429                        }, this );
    429430
     431                        workflow.state('featured-image').on( 'select', function() {
     432                                var settings = wp.media.view.settings,
     433                                        featuredImage = settings.featuredImage,
     434                                        selection = this.get('selection').single();
     435
     436                                if ( ! featuredImage )
     437                                        return;
     438
     439                                featuredImage.id = selection ? selection.id : -1;
     440                                wp.media.post( 'set-post-thumbnail', {
     441                                        json:         true,
     442                                        post_id:      settings.postId,
     443                                        thumbnail_id: featuredImage.id,
     444                                        _wpnonce:     featuredImage.nonce
     445                                }).done( function( html ) {
     446                                        $( '.inside', '#postimagediv' ).html( html );
     447                                });
     448                        });
     449
     450                        workflow.setState( workflow.options.state );
    430451                        return workflow;
    431452                },
    432453
     454                id: function( id ) {
     455                        if ( id )
     456                                return id;
     457
     458                        // If an empty `id` is provided, default to `wpActiveEditor`.
     459                        id = wpActiveEditor;
     460
     461                        // If that doesn't work, fall back to `tinymce.activeEditor.id`.
     462                        if ( ! id && typeof tinymce !== 'undefined' && tinymce.activeEditor )
     463                                id = tinymce.activeEditor.id;
     464
     465                        // Last but not least, fall back to the empty string.
     466                        id = id || '';
     467                        return id;
     468                },
     469
    433470                get: function( id ) {
     471                        id = this.id( id );
    434472                        return workflows[ id ];
    435473                },
    436474
    437475                remove: function( id ) {
     476                        id = this.id( id );
    438477                        delete workflows[ id ];
    439478                },
    440479
     
    497536                        }
    498537                },
    499538
     539                open: function( id ) {
     540                        var workflow, editor;
     541
     542                        id = this.id( id );
     543
     544                        // Save a bookmark of the caret position in IE.
     545                        if ( typeof tinymce !== 'undefined' ) {
     546                                editor = tinymce.get( id );
     547
     548                                if ( tinymce.isIE && editor && ! editor.isHidden() ) {
     549                                        editor.focus();
     550                                        editor.windowManager.insertimagebookmark = editor.selection.getBookmark();
     551                                }
     552                        }
     553
     554                        workflow = this.get( id );
     555
     556                        // Initialize the editor's workflow if we haven't yet.
     557                        if ( ! workflow )
     558                                workflow = this.add( id );
     559
     560                        return workflow.open();
     561                },
     562
    500563                init: function() {
    501564                        $(document.body).on( 'click', '.insert-media', function( event ) {
    502565                                var $this = $(this),
     
    513576
    514577                                wp.media.editor.open( editor );
    515578                        });
    516                 },
    517579
    518                 open: function( id ) {
    519                         var workflow, editor;
     580                        // Open the content media manager to the 'featured image' tab when
     581                        // the post thumbnail is clicked.
     582                        $('#postimagediv').on( 'click', '#set-post-thumbnail', function( event ) {
     583                                event.preventDefault();
     584                                // Stop propagation to prevent thickbox from activating.
     585                                event.stopPropagation();
    520586
    521                         // If an empty `id` is provided, default to `wpActiveEditor`.
    522                         id = id || wpActiveEditor;
     587                                // Always get the 'content' frame, since this is tailored to post.php.
     588                                var frame = wp.media.editor.add('content'),
     589                                        initialState = frame.state().id,
     590                                        escape;
    523591
    524                         if ( typeof tinymce !== 'undefined' && tinymce.activeEditor ) {
    525                                 // If that doesn't work, fall back to `tinymce.activeEditor`.
    526                                 if ( ! id ) {
    527                                         editor = tinymce.activeEditor;
    528                                         id = id || editor.id;
    529                                 } else {
    530                                         editor = tinymce.get( id );
    531                                 }
     592                                escape = function() {
     593                                        // Only run this event once.
     594                                        this.off( 'escape', escape );
    532595
    533                                 // Save a bookmark of the caret position, needed for IE
    534                                 if ( tinymce.isIE && editor && ! editor.isHidden() ) {
    535                                         editor.focus();
    536                                         editor.windowManager.insertimagebookmark = editor.selection.getBookmark();
    537                                 }
    538                         }
     596                                        // If we're still on the 'featured-image' state, restore
     597                                        // the initial state.
     598                                        if ( 'featured-image' === this.state().id )
     599                                                this.setState( initialState );
     600                                };
    539601
    540                         // Last but not least, fall back to the empty string.
    541                         id = id || '';
     602                                frame.on( 'escape', escape, frame );
    542603
    543                         workflow = wp.media.editor.get( id );
     604                                frame.setState('featured-image').open();
    544605
    545                         // If the workflow exists, open it.
    546                         // Initialize the editor's workflow if we haven't yet.
    547                         if ( workflow )
    548                                 workflow.open();
    549                         else
    550                                 workflow = wp.media.editor.add( id );
    551 
    552                         return workflow;
     606                        // Update the featured image id when the 'remove' link is clicked.
     607                        }).on( 'click', '#remove-post-thumbnail', function() {
     608                                wp.media.view.settings.featuredImage.id = -1;
     609                        });
    553610                }
    554611        };
    555612
     613        _.bindAll( wp.media.editor, 'open' );
    556614        $( wp.media.editor.init );
    557615}(jQuery));
  • wp-includes/js/media-views.js

     
    170170                        // created the `states` collection, or are trying to select a state
    171171                        // that does not exist.
    172172                        if ( ( previous && id === previous.id ) || ! this.states || ! this.states.get( id ) )
    173                                 return;
     173                                return this;
    174174
    175175                        if ( previous ) {
    176176                                previous.trigger('deactivate');
     
    179179
    180180                        this._state = id;
    181181                        this.state().trigger('activate');
     182
     183                        return this;
    182184                },
    183185
    184186                // Returns the previous active state.
     
    549551                }
    550552        });
    551553
     554        // wp.media.controller.FeaturedImage
     555        // ---------------------------------
     556        media.controller.FeaturedImage = media.controller.Library.extend({
     557                defaults: _.defaults({
     558                        id:         'featured-image',
     559                        filterable: 'uploaded',
     560                        multiple:   false,
     561                        menu:       'main',
     562                        toolbar:    'featured-image'
     563                }, media.controller.Library.prototype.defaults ),
    552564
     565                initialize: function() {
     566                        // If we haven't been provided a `library`, create a `Selection`.
     567                        if ( ! this.get('library') )
     568                                this.set( 'library', media.query({ type: 'image' }) );
     569
     570                        media.controller.Library.prototype.initialize.apply( this, arguments );
     571                },
     572
     573                activate: function() {
     574                        var selection = this.get('selection'),
     575                                id = media.view.settings.featuredImage.id;
     576
     577                        if ( '' !== id && -1 !== id ) {
     578                                attachment = Attachment.get( id );
     579                                attachment.fetch();
     580                        }
     581
     582                        selection.reset( attachment ? [ attachment ] : [] );
     583                        media.controller.Library.prototype.activate.apply( this, arguments );
     584                }
     585        });
     586
     587
    553588        // wp.media.controller.Embed
    554589        // -------------------------
    555590        media.controller.Embed = media.controller.State.extend({
     
    605640                        }, this );
    606641
    607642                        this.set( 'url', '' );
    608                         this.frame.toolbar.view().refresh();
     643
     644                        if ( this.id === this.frame.state().id )
     645                                this.frame.toolbar.view().refresh();
    609646                }
    610647        });
    611648
     
    10771114                        if ( this.options.modal ) {
    10781115                                this.modal = new media.view.Modal({
    10791116                                        controller: this,
    1080                                         $content:   this.$el,
    10811117                                        title:      this.options.title
    10821118                                });
     1119
     1120                                this.modal.content( this );
    10831121                        }
    10841122
    10851123                        // Force the uploader off if the upload limit has been exceeded or
     
    11021140                        this.on( 'attach', _.bind( this.views.ready, this.views ), this );
    11031141                },
    11041142
    1105                 render: function() {
    1106                         if ( this.modal )
    1107                                 this.modal.render();
    1108 
    1109                         media.view.Frame.prototype.render.apply( this, arguments );
    1110                         return this;
    1111                 },
    1112 
    11131143                createIframeStates: function( options ) {
    11141144                        var settings = media.view.settings,
    11151145                                tabs = settings.tabs,
     
    11861216        });
    11871217
    11881218        // Map some of the modal's methods to the frame.
    1189         _.each(['open','close','attach','detach'], function( method ) {
     1219        _.each(['open','close','attach','detach','escape'], function( method ) {
    11901220                media.view.MediaFrame.prototype[ method ] = function( view ) {
    11911221                        if ( this.modal )
    11921222                                this.modal[ method ].apply( this.modal, arguments );
     
    12021232                        media.view.MediaFrame.prototype.initialize.apply( this, arguments );
    12031233
    12041234                        _.defaults( this.options, {
    1205                                 state:     'upload',
    12061235                                selection: [],
    12071236                                library:   {},
    12081237                                multiple:  false
     
    13491378        media.view.MediaFrame.Post = media.view.MediaFrame.Select.extend({
    13501379                initialize: function() {
    13511380                        _.defaults( this.options, {
    1352                                 state:     'upload',
    13531381                                multiple:  true,
    13541382                                editing:   false
    13551383                        });
     
    14091437                                        libraryState: 'gallery-edit'
    14101438                                })
    14111439                        ]);
     1440
     1441
     1442                        if ( media.view.settings.featuredImage ) {
     1443                                this.states.add( new media.controller.FeaturedImage({
     1444                                        controller: this,
     1445                                        menu:       'main'
     1446                                }) );
     1447                        }
    14121448                },
    14131449
    14141450                bindHandlers: function() {
     
    14271463                                        toolbar: {
    14281464                                                'main-attachments': 'mainAttachmentsToolbar',
    14291465                                                'main-embed':       'mainEmbedToolbar',
     1466                                                'featured-image':   'featuredImageToolbar',
    14301467                                                'gallery-edit':     'galleryEditToolbar',
    14311468                                                'gallery-add':      'galleryAddToolbar'
    14321469                                        }
     
    14441481                        media.view.MediaFrame.Select.prototype.mainMenu.call( this, { silent: true });
    14451482
    14461483                        this.menu.view().set({
    1447                                 separateLibrary: new media.View({
     1484                                'library-separator': new media.View({
    14481485                                        className: 'separator',
    14491486                                        priority: 60
    14501487                                }),
    1451                                 embed: {
     1488                                'embed': {
    14521489                                        text: l10n.fromUrlTitle,
    14531490                                        priority: 80
    14541491                                }
    14551492                        });
     1493
     1494                        if ( media.view.settings.featuredImage ) {
     1495                                this.menu.view().set( 'featured-image', {
     1496                                        text: l10n.featuredImageTitle,
     1497                                        priority: 100
     1498                                });
     1499                        }
    14561500                },
    14571501
    14581502                galleryMenu: function() {
     
    15591603                        }) );
    15601604                },
    15611605
     1606                featuredImageToolbar: function() {
     1607                        this.toolbar.view( new media.view.Toolbar.Select({
     1608                                controller: this,
     1609                                text:       l10n.setFeaturedImage,
     1610                                state:      this.options.state || 'upload'
     1611                        }) );
     1612                },
     1613
    15621614                mainEmbedToolbar: function() {
    15631615                        this.toolbar.view( new media.view.Toolbar.Embed({
    15641616                                controller: this
     
    16291681                },
    16301682
    16311683                events: {
    1632                         'click .media-modal-backdrop, .media-modal-close': 'closeHandler',
     1684                        'click .media-modal-backdrop, .media-modal-close': 'escapeHandler',
    16331685                        'keydown': 'keydown'
    16341686                },
    16351687
     
    16431695                        });
    16441696                },
    16451697
    1646                 render: function() {
    1647                         // Ensure content div exists.
    1648                         this.options.$content = this.options.$content || $('<div />');
    1649 
    1650                         // Detach the content element from the DOM to prevent
    1651                         // `this.$el.html()` from garbage collecting its events.
    1652                         this.options.$content.detach();
    1653 
    1654                         this.$el.html( this.template({
     1698                prepare: function() {
     1699                        return {
    16551700                                title: this.options.title
    1656                         }) );
    1657 
    1658                         this.options.$content.addClass('media-modal-content');
    1659                         this.$('.media-modal').append( this.options.$content );
    1660                         return this;
     1701                        };
    16611702                },
    16621703
    16631704                attach: function() {
     1705                        if ( this.views.attached )
     1706                                return this;
     1707
     1708                        if ( ! this.views.rendered )
     1709                                this.render();
     1710
    16641711                        this.$el.appendTo( this.options.container );
     1712
     1713                        // Manually mark the view as attached and trigger ready.
     1714                        this.views.attached = true;
     1715                        this.views.ready();
     1716
    16651717                        return this.propagate('attach');
    16661718                },
    16671719
    16681720                detach: function() {
     1721                        if ( this.$el.is(':visible') )
     1722                                this.close();
     1723
    16691724                        this.$el.detach();
     1725                        this.views.attached = false;
    16701726                        return this.propagate('detach');
    16711727                },
    16721728
    16731729                open: function() {
     1730                        if ( this.$el.is(':visible') )
     1731                                return this;
     1732
     1733                        if ( ! this.views.attached )
     1734                                this.attach();
     1735
    16741736                        this.$el.show().focus();
    16751737                        return this.propagate('open');
    16761738                },
    16771739
    1678                 close: function() {
     1740                close: function( options ) {
     1741                        if ( ! this.views.attached || ! this.$el.is(':visible') )
     1742                                return this;
     1743
    16791744                        this.$el.hide();
    1680                         return this.propagate('close');
     1745                        this.propagate('close');
     1746
     1747                        if ( options && options.escape )
     1748                                this.propagate('escape');
     1749
     1750                        return this;
    16811751                },
    16821752
    1683                 closeHandler: function( event ) {
     1753                escape: function() {
     1754                        return this.close({ escape: true });
     1755                },
     1756
     1757                escapeHandler: function( event ) {
    16841758                        event.preventDefault();
    1685                         this.close();
     1759                        this.escape();
    16861760                },
    16871761
    1688                 content: function( $content ) {
    1689                         // Detach any existing content to prevent events from being lost.
    1690                         if ( this.options.$content )
    1691                                 this.options.$content.detach();
    1692 
    1693                         // Set and render the content.
    1694                         this.options.$content = ( $content instanceof Backbone.View ) ? $content.$el : $content;
    1695                         return this.render();
     1762                content: function( content ) {
     1763                        this.views.set( '.media-modal-content', content );
     1764                        return this;
    16961765                },
    16971766
    16981767                // Triggers a modal event and if the `propagate` option is set,
     
    17101779                        // Close the modal when escape is pressed.
    17111780                        if ( 27 === event.which ) {
    17121781                                event.preventDefault();
    1713                                 this.close();
     1782                                this.escape();
    17141783                                return;
    17151784                        }
    17161785                }
  • wp-includes/js/media-models.js

     
    3030                        frame = new MediaFrame.Post( attributes );
    3131
    3232                delete attributes.frame;
    33                 // Set the default state.
    34                 frame.setState( frame.options.state );
    35                 // Render, attach, and open the frame.
    36                 return frame.render().attach().open();
     33
     34                return frame;
    3735        };
    3836
    3937        _.extend( media, { model: {}, view: {}, controller: {} });
     
    235233
    236234                        // Overload the `update` request so properties can be saved.
    237235                        } else if ( 'update' === method ) {
     236                                if ( ! this.get('nonces') )
     237                                        return $.Deferred().resolveWith( this ).promise();
     238
    238239                                options = options || {};
    239240                                options.context = this;
    240241
  • wp-includes/media.php

     
    14341434                $post = get_post( $args['post'] );
    14351435                $settings['postId'] = $post->ID;
    14361436                $settings['nonce']['updatePost'] = wp_create_nonce( 'update-post_' . $post->ID );
     1437
     1438                if ( current_theme_supports( 'post-thumbnails', $post->post_type ) && post_type_supports( $post->post_type, 'thumbnail' ) ) {
     1439
     1440                        $featuredImageId = get_post_meta( $post->ID, '_thumbnail_id', true );
     1441
     1442                        $settings['featuredImage'] = array(
     1443                                'id'    => $featuredImageId ? $featuredImageId : -1,
     1444                                'nonce' => wp_create_nonce( 'set_post_thumbnail-' . $post->ID ),
     1445                        );
     1446                }
    14371447        }
    14381448
    14391449        $hier = $post && is_post_type_hierarchical( $post->post_type );
     
    14671477                // From URL
    14681478                'fromUrlTitle'       => __( 'From URL' ),
    14691479
     1480                // Featured Images
     1481                'featuredImageTitle'  => __( 'Featured Image' ),
     1482                'setFeaturedImage'    => __( 'Set featured image' ),
     1483
    14701484                // Gallery
    14711485                'createGalleryTitle' => __( 'Create Gallery' ),
    14721486                'editGalleryTitle'   => __( 'Edit Gallery' ),
     
    15111525                <div class="media-modal wp-core-ui">
    15121526                        <h3 class="media-modal-title">{{ data.title }}</h3>
    15131527                        <a class="media-modal-close media-modal-icon" href="#" title="<?php esc_attr_e('Close'); ?>"></a>
     1528                        <div class="media-modal-content"></div>
    15141529                </div>
    15151530                <div class="media-modal-backdrop">
    15161531                        <div></div>
  • wp-includes/css/media-views.css

     
    403403 */
    404404.media-frame {
    405405        overflow: hidden;
     406        position: absolute;
     407        top: 0;
     408        left: 0;
     409        right: 0;
     410        bottom: 0;
    406411}
    407412
    408413.media-frame .region-content {
  • wp-admin/includes/ajax-actions.php

     
    16741674}
    16751675
    16761676function wp_ajax_set_post_thumbnail() {
     1677        $json = ! empty( $_REQUEST['json'] );
     1678
    16771679        $post_ID = intval( $_POST['post_id'] );
    1678         if ( !current_user_can( 'edit_post', $post_ID ) )
    1679                 wp_die( -1 );
     1680        if ( !current_user_can( 'edit_post', $post_ID ) ) {
     1681                $json ? wp_send_json_error() : wp_die( -1 );
     1682        }
    16801683        $thumbnail_id = intval( $_POST['thumbnail_id'] );
    16811684
    16821685        check_ajax_referer( "set_post_thumbnail-$post_ID" );
    16831686
    16841687        if ( $thumbnail_id == '-1' ) {
    1685                 if ( delete_post_thumbnail( $post_ID ) )
    1686                         wp_die( _wp_post_thumbnail_html( null, $post_ID ) );
    1687                 else
    1688                         wp_die( 0 );
     1688                if ( delete_post_thumbnail( $post_ID ) ) {
     1689                        $return = _wp_post_thumbnail_html( null, $post_ID );
     1690                        $json ? wp_send_json_success( $return ) : wp_die( $return );
     1691                } else {
     1692                        $json ? wp_send_json_error() : wp_die( 0 );
     1693                }
    16891694        }
    16901695
    1691         if ( set_post_thumbnail( $post_ID, $thumbnail_id ) )
    1692                 wp_die( _wp_post_thumbnail_html( $thumbnail_id, $post_ID ) );
    1693         wp_die( 0 );
     1696        if ( set_post_thumbnail( $post_ID, $thumbnail_id ) ) {
     1697                $return = _wp_post_thumbnail_html( $thumbnail_id, $post_ID );
     1698                $json ? wp_send_json_success( $return ) : wp_die( $return );
     1699        }
     1700
     1701        $json ? wp_send_json_error() : wp_die( 0 );
    16941702}
    16951703
    16961704function wp_ajax_date_format() {
  • wp-admin/includes/post.php

     
    199199                        set_post_format( $post_ID, false );
    200200        }
    201201
    202         // Featured Images
    203         if ( isset( $post_data['thumbnail_id'] ) ) {
    204                 if ( '-1' == $post_data['thumbnail_id'] )
    205                         delete_post_thumbnail( $post_ID );
    206                 else
    207                         set_post_thumbnail( $post_ID, $post_data['thumbnail_id'] );
    208         }
    209 
    210202        // Meta Stuff
    211203        if ( isset($post_data['meta']) && $post_data['meta'] ) {
    212204                foreach ( $post_data['meta'] as $key => $value ) {
  • wp-admin/includes/meta-boxes.php

     
    10011001 * @since 2.9.0
    10021002 */
    10031003function post_thumbnail_meta_box( $post ) {
    1004         global $_wp_additional_image_sizes;
    1005 
    1006         ?><script type="text/javascript">
    1007         jQuery( function($) {
    1008                 var $element     = $('#select-featured-image'),
    1009                         $thumbnailId = $element.find('input[name="thumbnail_id"]'),
    1010                         title        = '<?php _e( "Choose a Featured Image" ); ?>',
    1011                         update       = '<?php _e( "Update Featured Image" ); ?>',
    1012                         Attachment   = wp.media.model.Attachment,
    1013                         frame, setFeaturedImage;
    1014 
    1015                 setFeaturedImage = function( thumbnailId ) {
    1016                         var selection;
    1017 
    1018                         $element.find('img').remove();
    1019                         $element.toggleClass( 'has-featured-image', -1 != thumbnailId );
    1020                         $thumbnailId.val( thumbnailId );
    1021 
    1022                         if ( frame ) {
    1023                                 selection = frame.state('library').get('selection');
    1024 
    1025                                 if ( -1 === thumbnailId )
    1026                                         selection.clear();
    1027                                 else
    1028                                         selection.add( Attachment.get( thumbnailId ) );
    1029                         }
    1030                 };
    1031 
    1032                 $element.on( 'click', '.choose, img', function( event ) {
    1033                         var options, thumbnailId, attachment;
    1034 
    1035                         event.preventDefault();
    1036 
    1037                         if ( frame ) {
    1038                                 frame.open();
    1039                                 return;
    1040                         }
    1041 
    1042                         options = {
    1043                                 title:   title,
    1044                                 library: {
    1045                                         type: 'image'
    1046                                 }
    1047                         };
    1048 
    1049                         thumbnailId = $thumbnailId.val();
    1050                         if ( '' !== thumbnailId && -1 !== thumbnailId ) {
    1051                                 attachment = Attachment.get( thumbnailId );
    1052                                 attachment.fetch();
    1053                                 options.selection = [ attachment ];
    1054                         }
    1055 
    1056                         frame = wp.media( options );
    1057 
    1058                         frame.state('library').set( 'filterable', 'uploaded' );
    1059 
    1060                         frame.toolbar.on( 'activate:select', function() {
    1061                                 frame.toolbar.view().set({
    1062                                         select: {
    1063                                                 style: 'primary',
    1064                                                 text:  update,
    1065 
    1066                                                 click: function() {
    1067                                                         var selection = frame.state().get('selection'),
    1068                                                                 model = selection.first(),
    1069                                                                 sizes = model.get('sizes'),
    1070                                                                 size;
    1071 
    1072                                                         setFeaturedImage( model.id );
    1073 
    1074                                                         // @todo: might need a size hierarchy equivalent.
    1075                                                         if ( sizes )
    1076                                                                 size = sizes['post-thumbnail'] || sizes.medium;
    1077 
    1078                                                         // @todo: Need a better way of accessing full size
    1079                                                         // data besides just calling toJSON().
    1080                                                         size = size || model.toJSON();
    1081 
    1082                                                         frame.close();
    1083 
    1084                                                         $( '<img />', {
    1085                                                                 src:    size.url,
    1086                                                                 width:  size.width
    1087                                                         }).prependTo( $element );
    1088                                                 }
    1089                                         }
    1090                                 });
    1091                         });
    1092 
    1093                         frame.toolbar.mode('select');
    1094                 });
    1095 
    1096                 $element.on( 'click', '.remove', function( event ) {
    1097                         event.preventDefault();
    1098                         setFeaturedImage( -1 );
    1099                 });
    1100         });
    1101         </script>
    1102 
    1103         <?php
    1104         $thumbnail_id   = get_post_meta( $post->ID, '_thumbnail_id', true );
    1105         $thumbnail_size = isset( $_wp_additional_image_sizes['post-thumbnail'] ) ? 'post-thumbnail' : 'medium';
    1106         $thumbnail_html = wp_get_attachment_image( $thumbnail_id, $thumbnail_size );
    1107 
    1108         $classes = empty( $thumbnail_id ) ? '' : 'has-featured-image';
    1109 
    1110         ?><div id="select-featured-image"
    1111                 class="<?php echo esc_attr( $classes ); ?>"
    1112                 data-post-id="<?php echo esc_attr( $post->ID ); ?>">
    1113                 <?php echo $thumbnail_html; ?>
    1114                 <input type="hidden" name="thumbnail_id" value="<?php echo esc_attr( $thumbnail_id ); ?>" />
    1115                 <a href="#" class="choose button-secondary"><?php _e( 'Choose a Featured Image' ); ?></a>
    1116                 <a href="#" class="remove"><?php _e( 'Remove Featured Image' ); ?></a>
    1117         </div>
    1118         <?php
     1004        $thumbnail_id = get_post_meta( $post->ID, '_thumbnail_id', true );
     1005        echo _wp_post_thumbnail_html( $thumbnail_id, $post->ID );
    11191006}
     1007 No newline at end of file
  • wp-admin/js/custom-background.js

     
    5757                                });
    5858                        });
    5959
    60                         frame.setState('library');
     60                        frame.setState('library').open();
    6161                });
    6262        });
    6363})(jQuery);
     64 No newline at end of file
  • wp-admin/js/custom-header.js

     
    4040                                });
    4141                        });
    4242
    43                         frame.setState('library');
     43                        frame.setState('library').open();
    4444                });
    4545        });
    4646}(jQuery));