WordPress.org

Make WordPress Core

Ticket #24131: 24131.patch

File 24131.patch, 3.8 KB (added by azaozz, 7 years 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.