wp-includes/revision.php:354Inserts post data into the posts table as a post revision.
$postint|WP_Post|array|nulloptionalnull$autosavebooloptionalfalseint|WP_ErrorOne hook fires while _wp_put_post_revision() runs, in this order:
Fires once a revision has been saved.
function _wp_put_post_revision( $post = null, $autosave = false ) { if ( is_object( $post ) ) { $post = get_object_vars( $post ); } elseif ( ! is_array( $post ) ) { $post = get_post( $post, ARRAY_A ); } if ( ! $post || empty( $post['ID'] ) ) { return new WP_Error( 'invalid_post', __( 'Invalid post ID.' ) ); } if ( isset( $post['post_type'] ) && 'revision' === $post['post_type'] ) { return new WP_Error( 'post_type', __( 'Cannot create a revision of a revision' ) ); } $post = _wp_post_revision_data( $post, $autosave ); $post = wp_slash( $post ); // Since data is from DB. $revision_id = wp_insert_post( $post, true ); if ( is_wp_error( $revision_id ) ) { return $revision_id; } if ( $revision_id ) { /** * Fires once a revision has been saved. * * @since 2.6.0 * @since 6.4.0 The post_id parameter was added. * * @param int $revision_id Post revision ID. * @param int $post_id Post ID. */ do_action( '_wp_put_post_revision', $revision_id, $post['post_parent'] ); } return $revision_id;}Introduced in 2.6.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-includes/revision.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.