Make WordPress Core


Ignore:
Timestamp:
11/30/2021 01:08:05 AM (4 years ago)
Author:
peterwilsoncc
Message:

REST API: Fire wp_after_insert_post later in new post object endpoints.

In the new menu items, global items and template controllers manually call the function wp_after_insert_post() to manually fire the action of the same name after all potential data is updated.

This accounts for the use case in which a theme or plugin developer has modified the endpoints use of either taxonomy or meta data.

The new parameter $fire_after_hooks is added to wp_update_nav_menu_item() to control whether the wp_after_insert_post action is fired when it in turn calls wp_insert_post().

Props spacedmonkey, peterwilsoncc, zieladam.
Fixes #54536.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php

    r52184 r52276  
    123123        $prepared_nav_item = (array) $prepared_nav_item;
    124124
    125         $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ) );
     125        $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ), false );
    126126        if ( is_wp_error( $nav_menu_item_id ) ) {
    127127            if ( 'db_insert_error' === $nav_menu_item_id->get_error_code() ) {
     
    182182        do_action( 'rest_after_insert_nav_menu_item', $nav_menu_item, $request, true );
    183183
    184         $response = $this->prepare_item_for_response( get_post( $nav_menu_item_id ), $request );
     184        $post = get_post( $nav_menu_item_id );
     185        wp_after_insert_post( $post, false, null );
     186
     187        $response = $this->prepare_item_for_response( $post, $request );
    185188        $response = rest_ensure_response( $response );
    186189
     
    205208            return $valid_check;
    206209        }
    207 
     210        $post_before       = get_post( $request['id'] );
    208211        $prepared_nav_item = $this->prepare_item_for_database( $request );
    209212
     
    214217        $prepared_nav_item = (array) $prepared_nav_item;
    215218
    216         $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ) );
     219        $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ), false );
    217220
    218221        if ( is_wp_error( $nav_menu_item_id ) ) {
     
    246249        }
    247250
     251        $post          = get_post( $nav_menu_item_id );
    248252        $nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id );
    249253        $fields_update = $this->update_additional_fields_for_object( $nav_menu_item, $request );
     
    257261        /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php */
    258262        do_action( 'rest_after_insert_nav_menu_item', $nav_menu_item, $request, false );
     263
     264        wp_after_insert_post( $post, true, $post_before );
    259265
    260266        $response = $this->prepare_item_for_response( get_post( $nav_menu_item_id ), $request );
Note: See TracChangeset for help on using the changeset viewer.