WordPress.org

Make WordPress Core

Ticket #15490: 15490.diff

File 15490.diff, 5.3 KB (added by jtsternberg, 5 years ago)

This successfully displays an oembed preview when an oembed url is detected. Still needs a proper nonce passed for the ajax action.

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

     
    42834283         */ 
    42844284        media.view.EmbedLink = media.view.Settings.extend({ 
    42854285                className: 'embed-link-settings', 
    4286                 template:  media.template('embed-link-settings') 
     4286                template:  media.template('embed-link-settings'), 
     4287 
     4288                initialize: function() { 
     4289                        this.model.on( 'change:url', this.updateoEmbed, this ); 
     4290                }, 
     4291 
     4292                updateoEmbed: function() { 
     4293                        var oembedURL = this.model.get('url'), 
     4294                        context = this.$el, 
     4295                        mainInput = context.parents('.media-embed'), 
     4296                        postID = media.view.settings.post.id; 
     4297 
     4298                        $('.setting.title', context).show(); 
     4299                        $('.embed-container', context).hide(); 
     4300                        // clear out previous results 
     4301                        $('.embed-container .embed-preview', context).html(''); 
     4302 
     4303                        // only proceed with embed if the field contains more than 6 characters 
     4304                        if (oembedURL.length < 6) 
     4305                                return; 
     4306 
     4307                        // show spinner 
     4308                        $('.spinner', mainInput).show(); 
     4309 
     4310                        setTimeout(function () { 
     4311                                // check if they haven't typed in 500 ms 
     4312                                if ( $('.embed-url input', mainInput).val() != oembedURL ) 
     4313                                        return; 
     4314 
     4315                                $.ajax({ 
     4316                                        type : 'post', 
     4317                                        dataType : 'json', 
     4318                                        url : ajaxurl, 
     4319                                        data : { 
     4320                                                'action': 'media-oembed', 
     4321                                                'oembed_url': oembedURL, 
     4322                                                'post_id': postID 
     4323                                                // 'media_ajax_nonce': window.media_ajax_data.ajax_nonce 
     4324                                        }, 
     4325                                        success: function (response) { 
     4326                                                // hide spinner 
     4327                                                $('.spinner', mainInput).hide(); 
     4328                                                // if we have a response id 
     4329                                                if (typeof response.result !== 'undefined' && response.result) { 
     4330                                                        // show our embed wrapper 
     4331                                                        $('.embed-container', context).show(); 
     4332                                                        // hide title input 
     4333                                                        $('.setting.title', context).hide(); 
     4334                                                        // and populate our results from ajax response 
     4335                                                        $('.embed-container .embed-preview', context).html(response.result); 
     4336                                                } 
     4337                                        } 
     4338                                }); 
     4339                        }, 500); 
     4340                } 
     4341 
    42874342        }); 
    42884343 
    42894344        /** 
  • wp-includes/media-template.php

     
    375375        </script> 
    376376 
    377377        <script type="text/html" id="tmpl-embed-link-settings"> 
    378                 <label class="setting"> 
     378                <label class="setting title"> 
    379379                        <span><?php _e('Title'); ?></span> 
    380380                        <input type="text" class="alignment" data-setting="title" /> 
    381381                </label> 
     382                <div class="embed-container" style="display: none;"> 
     383                        <div class="embed-preview"> 
     384                        </div> 
     385                        <label class="setting embed-width"> 
     386                                <span><?php _e('Width'); ?></span> 
     387                                <input type="text" class="alignment" data-setting="embed-width" /> 
     388                        </label> 
     389                        <label class="setting embed-height"> 
     390                                <span><?php _e('Height'); ?></span> 
     391                                <input type="text" class="alignment" data-setting="embed-height" /> 
     392                        </label> 
     393                </div> 
    382394        </script> 
    383395 
    384396        <script type="text/html" id="tmpl-embed-image-settings"> 
  • wp-admin/admin-ajax.php

     
    5656        'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post', 
    5757        'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment', 
    5858        'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor', 
    59         'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 
     59        'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'media-oembed' 
    6060); 
    6161 
    6262// Register core Ajax calls. 
  • wp-admin/includes/ajax-actions.php

     
    20812081                $screen_id = sanitize_key($_POST['screenid']); 
    20822082        else 
    20832083                $screen_id = 'site'; 
    2084  
     2084 
    20852085        if ( ! empty($_POST['data']) ) { 
    20862086                $data = (array) $_POST['data']; 
    20872087                // todo: how much to sanitize and preset and what to leave to be accessed from $data or $_POST..? 
     
    21072107 
    21082108        wp_send_json($response); 
    21092109} 
     2110 
     2111/** 
     2112 * Handles our oEmbed ajax request 
     2113 */ 
     2114function wp_ajax_media_oembed() { 
     2115 
     2116        // @TODO verify our nonce 
     2117        // if ( ! ( isset( $_REQUEST['media_ajax_data'], $_REQUEST['oembed_url'] ) && wp_verify_nonce( $_REQUEST['media_ajax_data'], 'ajax_nonce' ) ) ) 
     2118        //      die(); 
     2119 
     2120        // sanitize our search string 
     2121        $oembed_string = sanitize_text_field( $_REQUEST['oembed_url'] ); 
     2122 
     2123        $return = false; 
     2124 
     2125        if ( !empty( $oembed_string ) ) { 
     2126                global $post, $wp_embed; 
     2127 
     2128                $oembed_url = esc_url( $oembed_string ); 
     2129                // Post ID is needed to check for embeds 
     2130                $post = get_post( isset( $_REQUEST['post_id'] ) ? $_REQUEST['post_id'] : 0 ); 
     2131                // ping WordPress for an embed 
     2132                $check_embed = $wp_embed->run_shortcode( '[embed]'. $oembed_url .'[/embed]' ); 
     2133                // fallback that WordPress creates when no oEmbed was found 
     2134                $fallback = $wp_embed->maybe_make_link( $oembed_url ); 
     2135 
     2136                if ( $check_embed && $check_embed != $fallback ) 
     2137                        // Embed data 
     2138                        $return = $check_embed; 
     2139                else 
     2140                        // no oEmbeds were found 
     2141                        $return = false; 
     2142        } 
     2143 
     2144        // send back our encoded data 
     2145        echo json_encode( array( 'result' => $return ) ); 
     2146        die(); 
     2147}