wp_save_post_revision() – Creates a revision for the current version of a post.

You appear to be a bot. Output may be restricted

Description

Creates a revision for the current version of a post.

Typically used immediately after a post update, as every update is a revision, and the most recent revision always matches the current post.

Usage

$int|WP_Error|void = wp_save_post_revision( $post_id );

Parameters

$post_id
( int ) required – The ID of the post to save as a revision.

Returns

int|WP_Error|void Void or 0 if error, new revision ID, if success.

Source

File name: wordpress/wp-includes/revision.php
Lines:

1 to 100 of 111
function wp_save_post_revision( $post_id ) {
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
    return;
  }

  $post = get_post( $post_id );
  if ( ! $post ) {
    return;
  }

  if ( ! post_type_supports( $post->post_type, 'revisions' ) ) {
    return;
  }

  if ( 'auto-draft' === $post->post_status ) {
    return;
  }

  if ( ! wp_revisions_enabled( $post ) ) {
    return;
  }

  /*
	 * Compare the proposed update with the last stored revision verifying that
	 * they are different, unless a plugin tells us to always save regardless.
	 * If no previous revisions, save one.
	 */
  $revisions = wp_get_post_revisions( $post_id );
  if ( $revisions ) {
    // Grab the last revision, but not an autosave.
    foreach ( $revisions as $revision ) {
      if ( false !== strpos( $revision->post_name, "{$revision->post_parent}-revision" ) ) {
        $last_revision = $revision;
        break;
      }
    }

    
/**
 * Filters whether the post has changed since the last revision.
 *
 * By default a revision is saved only if one of the revisioned fields has changed.
 * This filter can override that so a revision is saved even if nothing has changed.
 *
 * @since 3.6.0
 *
 * @param bool    $check_for_changes Whether to check for changes before saving a new revision.
 *                                   Default true.
 * @param WP_Post $last_revision     The last revision post object.
 * @param WP_Post $post              The post object.
 */
    if ( isset( $last_revision ) && apply_filters( 'wp_save_post_revision_check_for_changes', true, $last_revision, $post ) ) {
      $post_has_changed = false;

      foreach ( array_keys( _wp_post_revision_fields( $post ) ) as $field ) {
        if ( normalize_whitespace( $post->$field ) !== normalize_whitespace( $last_revision->$field ) ) {
          $post_has_changed = true;
          break;
        }
      }

      
/**
 * Filters whether a post has changed.
 *
 * By default a revision is saved only if one of the revisioned fields has changed.
 * This filter allows for additional checks to determine if there were changes.
 *
 * @since 4.1.0
 *
 * @param bool    $post_has_changed Whether the post has changed.
 * @param WP_Post $last_revision    The last revision post object.
 * @param WP_Post $post             The post object.
 */
      $post_has_changed = (bool) apply_filters( 'wp_save_post_revision_post_has_changed', $post_has_changed, $last_revision, $post );

      // Don't save revision if post unchanged.
      if ( ! $post_has_changed ) {
        return;
      }
    }
  }

  $return = _wp_put_post_revision( $post );

  // If a limit for the number of revisions to keep has been set,
  // delete the oldest ones.
  $revisions_to_keep = wp_revisions_to_keep( $post );

  if ( $revisions_to_keep < 0 ) {
    return $return;
  }

  $revisions = wp_get_post_revisions( $post_id, array( 'order' => 'ASC' ) );

  $delete = count( $revisions ) - $revisions_to_keep;

  if ( $delete < 1 ) {
    return $return;
  }

  $revisions = array_slice( $revisions, 0, $delete );
 

 View on GitHub View on Trac