WordPress.org

Make WordPress Core

Ticket #45114: 45114-alt.diff

File 45114-alt.diff, 2.6 KB (added by kraftbj, 21 months ago)

Alterative approach of moving the firing order within the REST controller.

  • src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

    diff --git src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
    index 0f27070c3b..eceacb18fc 100644
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    589589                        return $prepared_post;
    590590                }
    591591
     592                // We will pass a "new" status to stage the new post.
     593                $post_status = $prepared_post->post_status;
     594                $prepared_post->post_status = 'new';
     595
    592596                $prepared_post->post_type = $this->post_type;
    593597
    594598                $post_id = wp_insert_post( wp_slash( (array) $prepared_post ), true );
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    664668
    665669                $request->set_param( 'context', 'edit' );
    666670
     671
     672                // Now that the post has been fully setup, we can update the post status to the original one.
     673                wp_update_post(
     674                        array(
     675                                'ID' => $post_id,
     676                                'post_status' => $post_status
     677                        )
     678                );
     679
    667680                /**
    668681                 * Fires after a single post is completely created or updated via the REST API.
    669682                 *
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    751764                        return $valid_check;
    752765                }
    753766
    754                 $post = $this->prepare_item_for_database( $request );
    755 
    756                 if ( is_wp_error( $post ) ) {
    757                         return $post;
    758                 }
    759 
    760                 // Convert the post object to an array, otherwise wp_update_post() will expect non-escaped input.
    761                 $post_id = wp_update_post( wp_slash( (array) $post ), true );
     767                $post_id = $request['id'];
     768                $prepared_post = $this->prepare_item_for_database( $request );
    762769
    763                 if ( is_wp_error( $post_id ) ) {
    764                         if ( 'db_update_error' === $post_id->get_error_code() ) {
    765                                 $post_id->add_data( array( 'status' => 500 ) );
    766                         } else {
    767                                 $post_id->add_data( array( 'status' => 400 ) );
    768                         }
    769                         return $post_id;
     770                if ( is_wp_error( $prepared_post ) ) {
     771                        return $prepared_post;
    770772                }
    771773
    772774                $post = get_post( $post_id );
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    817819                        return $fields_update;
    818820                }
    819821
     822                // Convert the post object to an array, otherwise wp_update_post() will expect non-escaped input.
     823                $post_id = wp_update_post( wp_slash( (array) $prepared_post ), true );
     824
     825                if ( is_wp_error( $post_id ) ) {
     826                        if ( 'db_update_error' === $post_id->get_error_code() ) {
     827                                $post_id->add_data( array( 'status' => 500 ) );
     828                        } else {
     829                                $post_id->add_data( array( 'status' => 400 ) );
     830                        }
     831                        return $post_id;
     832                }
     833
    820834                $request->set_param( 'context', 'edit' );
    821835
    822836                // Filter is fired in WP_REST_Attachments_Controller subclass.