WordPress.org

Make WordPress Core

Ticket #24131: 24131.patch

File 24131.patch, 3.8 KB (added by azaozz, 12 months ago)
  • wp-admin/includes/post.php

     
    13611361        } 
    13621362 
    13631363        $user_id = get_current_user_id(); 
     1364        $query_args = array( 'preview' => 'true' ); 
     1365 
    13641366        if ( 'draft' == $post->post_status && $user_id == $post->post_author ) { 
    13651367                $id = edit_post(); 
    13661368        } else { // Non drafts are not overwritten. The autosave is stored in a special post revision. 
    13671369                $id = wp_create_post_autosave( $post->ID ); 
    1368                 if ( ! is_wp_error($id) ) 
     1370                if ( ! is_wp_error($id) ) { 
    13691371                        $id = $post->ID; 
     1372                        $query_args['latest_changes'] = 'true'; 
     1373                } 
    13701374        } 
    13711375 
    13721376        if ( is_wp_error($id) ) 
    13731377                wp_die( $id->get_error_message() ); 
    13741378 
    1375         if ( $_POST['post_status'] == 'draft' && $user_id == $post->post_author ) { 
    1376                 $url = add_query_arg( 'preview', 'true', get_permalink($id) ); 
    1377         } else { 
    1378                 $nonce = wp_create_nonce('post_preview_' . $id); 
    1379                 $url = add_query_arg( array( 'preview' => 'true', 'preview_id' => $id, 'preview_nonce' => $nonce ), get_permalink($id) ); 
    1380         } 
    1381  
    1382         return apply_filters( 'preview_post_link', $url ); 
     1379        return apply_filters( 'preview_post_link', add_query_arg( $query_args, get_permalink($id) ) ); 
    13831380} 
  • wp-includes/default-filters.php

     
    275275add_action( 'template_redirect', 'wp_old_slug_redirect'              ); 
    276276add_action( 'post_updated',      'wp_check_for_changed_slugs', 12, 3 ); 
    277277 
    278 // Nonce check for Post Previews 
    279 add_action( 'init', '_show_post_preview' ); 
     278// Post Previews 
     279add_filter('the_preview', '_set_preview'); 
    280280 
    281281// Timezone 
    282282add_filter( 'pre_option_gmt_offset','wp_timezone_override_offset' ); 
  • wp-includes/revision.php

     
    496496        return (int) apply_filters( 'wp_revisions_to_keep', $num, $post ); 
    497497} 
    498498 
    499 function _set_preview($post) { 
     499function _set_preview( $post ) { 
     500        if ( isset($_GET['latest_changes']) ) { 
     501                if ( ! is_object($post) ) 
     502                        return $post; 
    500503 
    501         if ( ! is_object($post) ) 
    502                 return $post; 
     504                $preview = wp_get_post_autosave($post->ID); 
    503505 
    504         $preview = wp_get_post_autosave($post->ID); 
     506                if ( ! is_object($preview) ) 
     507                        return $post; 
    505508 
    506         if ( ! is_object($preview) ) 
    507                 return $post; 
     509                // Show the latest changes only to the author when post_status != publish 
     510                if ( $post->post_status == 'publish' || $preview->post_author == get_current_user_id() ) { 
     511                        $preview = sanitize_post($preview); 
    508512 
    509         $preview = sanitize_post($preview); 
     513                        $post->post_content = $preview->post_content; 
     514                        $post->post_title = $preview->post_title; 
     515                        $post->post_excerpt = $preview->post_excerpt; 
    510516 
    511         $post->post_content = $preview->post_content; 
    512         $post->post_title = $preview->post_title; 
    513         $post->post_excerpt = $preview->post_excerpt; 
     517                        add_filter( 'get_post_metadata', '_wp_preview_meta_filter', 10, 4 ); 
     518                        add_filter( 'get_the_terms', '_wp_preview_terms_filter', 10, 3 ); 
     519                } 
     520        } 
    514521 
    515         add_filter( 'get_post_metadata', '_wp_preview_meta_filter', 10, 4 ); 
    516         add_filter( 'get_the_terms', '_wp_preview_terms_filter', 10, 3 ); 
    517  
    518522        return $post; 
    519523} 
    520524 
    521 function _show_post_preview() { 
    522  
    523         if ( isset($_GET['preview_id']) && isset($_GET['preview_nonce']) ) { 
    524                 $id = (int) $_GET['preview_id']; 
    525  
    526                 if ( false == wp_verify_nonce( $_GET['preview_nonce'], 'post_preview_' . $id ) ) 
    527                         wp_die( __('You do not have permission to preview drafts.') ); 
    528  
    529                 add_filter('the_preview', '_set_preview'); 
    530         } 
    531 } 
    532  
    533525/** 
    534526 * Filters post meta retrieval to get values from the actual autosave post, 
    535527 * and not its parent. Filters revisioned meta keys only.