WordPress.org

Make WordPress Core

Ticket #38905: 38905.diff

File 38905.diff, 15.5 KB (added by rachelbaker, 4 years ago)

Fire the rest_insert_* actions after the initial object has been inserted or updated

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

     
    155155
    156156                $attachment = get_post( $id );
    157157
     158                /**
     159                 * Fires after a single attachment is created or updated via the REST API.
     160                 *
     161                 * @since 4.7.0
     162                 *
     163                 * @param WP_Post         $attachment Inserted or updated attachment
     164                 *                                    object.
     165                 * @param WP_REST_Request $request    The request sent to the API.
     166                 * @param bool            $creating   True when creating an attachment, false when updating.
     167                 */
     168                do_action( 'rest_insert_attachment', $attachment, $request, true );
     169
    158170                // Include admin functions to get access to wp_generate_attachment_metadata().
    159171                require_once ABSPATH . 'wp-admin/includes/admin.php';
    160172
     
    176188                $response->set_status( 201 );
    177189                $response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $id ) ) );
    178190
    179                 /**
    180                  * Fires after a single attachment is created or updated via the REST API.
    181                  *
    182                  * @since 4.7.0
    183                  *
    184                  * @param object          $attachment Inserted attachment.
    185                  * @param WP_REST_Request $request    The request sent to the API.
    186                  * @param bool            $creating   True when creating an attachment, false when updating.
    187                  */
    188                 do_action( 'rest_insert_attachment', $attachment, $request, true );
    189 
    190191                return $response;
    191192        }
    192193
     
    219220
    220221                $attachment = get_post( $request['id'] );
    221222
     223                /* This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php */
     224                do_action( 'rest_insert_attachment', $data, $request, false );
     225
    222226                $fields_update = $this->update_additional_fields_for_object( $attachment, $request );
    223227
    224228                if ( is_wp_error( $fields_update ) ) {
     
    229233                $response = $this->prepare_item_for_response( $attachment, $request );
    230234                $response = rest_ensure_response( $response );
    231235
    232                 /* This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php */
    233                 do_action( 'rest_insert_attachment', $data, $request, false );
    234 
    235236                return $response;
    236237        }
    237238
  • src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php

     
    567567                }
    568568
    569569                if ( isset( $request['status'] ) ) {
    570                         $comment = get_comment( $comment_id );
    571 
    572                         $this->handle_status_param( $request['status'], $comment );
     570                        $this->handle_status_param( $request['status'], $comment_id );
    573571                }
    574572
     573                $comment = get_comment( $comment_id );
     574
     575                /**
     576                 * Fires after a comment is created or updated via the REST API.
     577                 *
     578                 * @since 4.7.0
     579                 *
     580                 * @param WP_Comment      $comment  Inserted or updated comment object.
     581                 * @param WP_REST_Request $request  Request object.
     582                 * @param bool            $creating True when creating a comment, false
     583                 *                                  when updating.
     584                 */
     585                do_action( 'rest_insert_comment', $comment, $request, true );
     586
    575587                $schema = $this->get_item_schema();
    576588
    577589                if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
     
    582594                        }
    583595                }
    584596
    585                 $comment = get_comment( $comment_id );
    586 
    587597                $fields_update = $this->update_additional_fields_for_object( $comment, $request );
    588598
    589599                if ( is_wp_error( $fields_update ) ) {
     
    600610                $response->set_status( 201 );
    601611                $response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $comment_id ) ) );
    602612
    603                 /**
    604                  * Fires after a comment is created or updated via the REST API.
    605                  *
    606                  * @since 4.7.0
    607                  *
    608                  * @param array           $comment  Comment as it exists in the database.
    609                  * @param WP_REST_Request $request  The request sent to the API.
    610                  * @param bool            $creating True when creating a comment, false when updating.
    611                  */
    612                 do_action( 'rest_insert_comment', $comment, $request, true );
    613613
    614614                return $response;
    615615        }
     
    666666
    667667                if ( empty( $prepared_args ) && isset( $request['status'] ) ) {
    668668                        // Only the comment status is being changed.
    669                         $change = $this->handle_status_param( $request['status'], $comment );
     669                        $change = $this->handle_status_param( $request['status'], $id );
    670670
    671671                        if ( ! $change ) {
    672672                                return new WP_Error( 'rest_comment_failed_edit', __( 'Updating comment status failed.' ), array( 'status' => 500 ) );
     
    695695                        }
    696696
    697697                        if ( isset( $request['status'] ) ) {
    698                                 $this->handle_status_param( $request['status'], $comment );
     698                                $this->handle_status_param( $request['status'], $id );
    699699                        }
    700700                }
    701701
     702                $comment = get_comment( $id );
     703
     704                /* This action is documented in lib/endpoints/class-wp-rest-comments-controller.php */
     705                do_action( 'rest_insert_comment', $comment, $request, false );
     706
    702707                $schema = $this->get_item_schema();
    703708
    704709                if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
     
    709714                        }
    710715                }
    711716
    712                 $comment = get_comment( $id );
    713 
    714717                $fields_update = $this->update_additional_fields_for_object( $comment, $request );
    715718
    716719                if ( is_wp_error( $fields_update ) ) {
     
    721724
    722725                $response = $this->prepare_item_for_response( $comment, $request );
    723726
    724                 /* This action is documented in lib/endpoints/class-wp-rest-comments-controller.php */
    725                 do_action( 'rest_insert_comment', $comment, $request, false );
    726 
    727727                return rest_ensure_response( $response );
    728728        }
    729729
     
    14331433         * @access protected
    14341434         *
    14351435         * @param string|int $new_status New comment status.
    1436          * @param WP_Comment $comment    Comment data.
     1436         * @param int        $comment_id Comment ID.
    14371437         * @return bool Whether the status was changed.
    14381438         */
    1439         protected function handle_status_param( $new_status, $comment ) {
    1440                 $old_status = wp_get_comment_status( $comment->comment_ID );
     1439        protected function handle_status_param( $new_status, $comment_id ) {
     1440                $old_status = wp_get_comment_status( $comment_id );
    14411441
    14421442                if ( $new_status === $old_status ) {
    14431443                        return false;
     
    14471447                        case 'approved' :
    14481448                        case 'approve':
    14491449                        case '1':
    1450                                 $changed = wp_set_comment_status( $comment->comment_ID, 'approve' );
     1450                                $changed = wp_set_comment_status( $comment_id, 'approve' );
    14511451                                break;
    14521452                        case 'hold':
    14531453                        case '0':
    1454                                 $changed = wp_set_comment_status( $comment->comment_ID, 'hold' );
     1454                                $changed = wp_set_comment_status( $comment_id, 'hold' );
    14551455                                break;
    14561456                        case 'spam' :
    1457                                 $changed = wp_spam_comment( $comment->comment_ID );
     1457                                $changed = wp_spam_comment( $comment_id );
    14581458                                break;
    14591459                        case 'unspam' :
    1460                                 $changed = wp_unspam_comment( $comment->comment_ID );
     1460                                $changed = wp_unspam_comment( $comment_id );
    14611461                                break;
    14621462                        case 'trash' :
    1463                                 $changed = wp_trash_comment( $comment->comment_ID );
     1463                                $changed = wp_trash_comment( $comment_id );
    14641464                                break;
    14651465                        case 'untrash' :
    1466                                 $changed = wp_untrash_comment( $comment->comment_ID );
     1466                                $changed = wp_untrash_comment( $comment_id );
    14671467                                break;
    14681468                        default :
    14691469                                $changed = false;
  • src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

     
    482482                        return new WP_Error( 'rest_post_exists', __( 'Cannot create existing post.' ), array( 'status' => 400 ) );
    483483                }
    484484
    485                 $post = $this->prepare_item_for_database( $request );
     485                $prepared_post = $this->prepare_item_for_database( $request );
    486486
    487                 if ( is_wp_error( $post ) ) {
    488                         return $post;
     487                if ( is_wp_error( $prepared_post ) ) {
     488                        return $prepared_post;
    489489                }
    490490
    491                 $post->post_type = $this->post_type;
    492                 $post_id         = wp_insert_post( wp_slash( (array) $post ), true );
     491                $prepared_post->post_type = $this->post_type;
    493492
     493                $post_id = wp_insert_post( wp_slash( (array) $prepared_post ), true );
     494
    494495                if ( is_wp_error( $post_id ) ) {
    495496
    496497                        if ( 'db_insert_error' === $post_id->get_error_code() ) {
     
    502503                        return $post_id;
    503504                }
    504505
    505                 $post->ID = $post_id;
     506                $post = get_post( $post_id );
    506507
     508                /**
     509                 * Fires after a single post is created or updated via the REST API.
     510                 *
     511                 * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
     512                 *
     513                 * @since 4.7.0
     514                 *
     515                 * @param WP_Post         $post     Inserted or updated post object.
     516                 * @param WP_REST_Request $request  Request object.
     517                 * @param bool            $creating True when creating a post, false when updating.
     518                 */
     519                do_action( "rest_insert_{$this->post_type}", $post, $request, true );
     520
    507521                $schema = $this->get_item_schema();
    508522
    509523                if ( ! empty( $schema['properties']['sticky'] ) ) {
     
    515529                }
    516530
    517531                if ( ! empty( $schema['properties']['featured_media'] ) && isset( $request['featured_media'] ) ) {
    518                         $this->handle_featured_media( $request['featured_media'], $post->ID );
     532                        $this->handle_featured_media( $request['featured_media'], $post_id );
    519533                }
    520534
    521535                if ( ! empty( $schema['properties']['format'] ) && ! empty( $request['format'] ) ) {
     
    523537                }
    524538
    525539                if ( ! empty( $schema['properties']['template'] ) && isset( $request['template'] ) ) {
    526                         $this->handle_template( $request['template'], $post->ID );
     540                        $this->handle_template( $request['template'], $post_id );
    527541                }
    528542
    529                 $terms_update = $this->handle_terms( $post->ID, $request );
     543                $terms_update = $this->handle_terms( $post_id, $request );
    530544
    531545                if ( is_wp_error( $terms_update ) ) {
    532546                        return $terms_update;
    533547                }
    534548
    535                 $post = get_post( $post_id );
    536 
    537549                if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
    538                         $meta_update = $this->meta->update_value( $request['meta'], (int) $request['id'] );
     550                        $meta_update = $this->meta->update_value( $request['meta'], $post_id );
    539551
    540552                        if ( is_wp_error( $meta_update ) ) {
    541553                                return $meta_update;
     
    542554                        }
    543555                }
    544556
     557                $post = get_post( $post_id );
    545558                $fields_update = $this->update_additional_fields_for_object( $post, $request );
    546559
    547560                if ( is_wp_error( $fields_update ) ) {
     
    548561                        return $fields_update;
    549562                }
    550563
    551                 /**
    552                  * Fires after a single post is created or updated via the REST API.
    553                  *
    554                  * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
    555                  *
    556                  * @since 4.7.0
    557                  *
    558                  * @param object          $post     Inserted Post object (not a WP_Post object).
    559                  * @param WP_REST_Request $request  Request object.
    560                  * @param bool            $creating True when creating post, false when updating.
    561                  */
    562                 do_action( "rest_insert_{$this->post_type}", $post, $request, true );
    563 
    564564                $request->set_param( 'context', 'edit' );
    565565
    566566                $response = $this->prepare_item_for_response( $post, $request );
     
    640640                        return $post_id;
    641641                }
    642642
     643                $post = get_post( $post_id );
     644
     645                /* This action is documented in lib/endpoints/class-wp-rest-controller.php */
     646                do_action( "rest_insert_{$this->post_type}", $post, $request, false );
     647
    643648                $schema = $this->get_item_schema();
    644649
    645650                if ( ! empty( $schema['properties']['format'] ) && ! empty( $request['format'] ) ) {
     
    668673                        return $terms_update;
    669674                }
    670675
    671                 $post = get_post( $post_id );
    672 
    673676                if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
    674677                        $meta_update = $this->meta->update_value( $request['meta'], $post->ID );
    675678
     
    678681                        }
    679682                }
    680683
     684                $post = get_post( $post_id );
    681685                $fields_update = $this->update_additional_fields_for_object( $post, $request );
    682686
    683687                if ( is_wp_error( $fields_update ) ) {
     
    684688                        return $fields_update;
    685689                }
    686690
    687                 /* This action is documented in lib/endpoints/class-wp-rest-controller.php */
    688                 do_action( "rest_insert_{$this->post_type}", $post, $request, false );
    689 
    690691                $request->set_param( 'context', 'edit' );
    691692
    692693                $response = $this->prepare_item_for_response( $post, $request );
  • src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php

     
    403403                 *
    404404                 * @since 4.7.0
    405405                 *
    406                  * @param WP_Term         $term     Inserted Term object.
     406                 * @param WP_Term         $term     Inserted or updated term object.
    407407                 * @param WP_REST_Request $request  Request object.
    408                  * @param bool            $creating True when creating term, false when updating.
     408                 * @param bool            $creating True when creating a term, false when updating.
    409409                 */
    410410                do_action( "rest_insert_{$this->taxonomy}", $term, $request, true );
    411411
  • src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

     
    461461
    462462                $user = get_user_by( 'id', $user_id );
    463463
     464                /**
     465                 * Fires immediately after a user is created or updated via the REST API.
     466                 *
     467                 * @since 4.7.0
     468                 *
     469                 * @param WP_User         $user     Inserted or updated user object.
     470                 * @param WP_REST_Request $request  Request object.
     471                 * @param bool            $creating True when creating a user, false when updating.
     472                 */
     473                do_action( 'rest_insert_user', $user, $request, true );
     474
    464475                if ( ! empty( $request['roles'] ) && ! empty( $schema['properties']['roles'] ) ) {
    465476                        array_map( array( $user, 'add_role' ), $request['roles'] );
    466477                }
     
    473484                        }
    474485                }
    475486
     487                $user = get_user_by( 'id', $user_id );
    476488                $fields_update = $this->update_additional_fields_for_object( $user, $request );
    477489
    478490                if ( is_wp_error( $fields_update ) ) {
     
    479491                        return $fields_update;
    480492                }
    481493
    482                 /**
    483                  * Fires immediately after a user is created or updated via the REST API.
    484                  *
    485                  * @since 4.7.0
    486                  *
    487                  * @param WP_User         $user     Data used to create the user.
    488                  * @param WP_REST_Request $request  Request object.
    489                  * @param bool            $creating True when creating user, false when updating user.
    490                  */
    491                 do_action( 'rest_insert_user', $user, $request, true );
    492 
    493494                $request->set_param( 'context', 'edit' );
    494495
    495496                $response = $this->prepare_item_for_response( $user, $request );
     
    573574                        return $user_id;
    574575                }
    575576
    576                 $user = get_user_by( 'id', $id );
     577                $user = get_user_by( 'id', $user_id );
    577578
     579                /* This action is documented in lib/endpoints/class-wp-rest-users-controller.php */
     580                do_action( 'rest_insert_user', $user, $request, false );
     581
    578582                if ( is_multisite() && ! is_user_member_of_blog( $id ) ) {
    579583                        add_user_to_blog( get_current_blog_id(), $id, '' );
    580584                }
     
    593597                        }
    594598                }
    595599
     600                $user = get_user_by( 'id', $user_id );
    596601                $fields_update = $this->update_additional_fields_for_object( $user, $request );
    597602
    598603                if ( is_wp_error( $fields_update ) ) {
     
    599604                        return $fields_update;
    600605                }
    601606
    602                 /* This action is documented in lib/endpoints/class-wp-rest-users-controller.php */
    603                 do_action( 'rest_insert_user', $user, $request, false );
    604 
    605607                $request->set_param( 'context', 'edit' );
    606608
    607609                $response = $this->prepare_item_for_response( $user, $request );