_wp_upgrade_revisions_of_post

The timeline below displays how wordpress function _wp_upgrade_revisions_of_post has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Upgrades the revisions author, adds the current post as a revision and sets the revisions version to 1.
 *
 * @since 3.6.0
 * @access private
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param WP_Post $post      Post object.
 * @param array   $revisions Current revisions of the post.
 * @return bool true if the revisions were upgraded, false if problems.
 */
function _wp_upgrade_revisions_of_post($post, $revisions)
{
    global $wpdb;
    // Add post option exclusively.
    $lock = "revision-upgrade-{$post->ID}";
    $now = time();
    $result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now));
    if (!$result) {
        // If we couldn't get a lock, see how old the previous lock is.
        $locked = get_option($lock);
        if (!$locked) {
            /*
             * Can't write to the lock, and can't read the lock.
             * Something broken has happened.
             */
            return false;
        }
        if ($locked > $now - HOUR_IN_SECONDS) {
            // Lock is not too old: some other process may be upgrading this post. Bail.
            return false;
        }
        // Lock is too old - update it (below) and continue.
    }
    // If we could get a lock, re-"add" the option to fire all the correct filters.
    update_option($lock, $now);
    reset($revisions);
    $add_last = true;
    do {
        $this_revision = current($revisions);
        $prev_revision = next($revisions);
        $this_revision_version = _wp_get_post_revision_version($this_revision);
        // Something terrible happened.
        if (false === $this_revision_version) {
            continue;
        }
        /*
         * 1 is the latest revision version, so we're already up to date.
         * No need to add a copy of the post as latest revision.
         */
        if (0 < $this_revision_version) {
            $add_last = false;
            continue;
        }
        // Always update the revision version.
        $update = array('post_name' => preg_replace('/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name));
        /*
         * If this revision is the oldest revision of the post, i.e. no $prev_revision,
         * the correct post_author is probably $post->post_author, but that's only a good guess.
         * Update the revision version only and Leave the author as-is.
         */
        if ($prev_revision) {
            $prev_revision_version = _wp_get_post_revision_version($prev_revision);
            // If the previous revision is already up to date, it no longer has the information we need :(
            if ($prev_revision_version < 1) {
                $update['post_author'] = $prev_revision->post_author;
            }
        }
        // Upgrade this revision.
        $result = $wpdb->update($wpdb->posts, $update, array('ID' => $this_revision->ID));
        if ($result) {
            wp_cache_delete($this_revision->ID, 'posts');
        }
    } while ($prev_revision);
    delete_option($lock);
    // Add a copy of the post as latest revision.
    if ($add_last) {
        wp_save_post_revision($post->ID);
    }
    return true;
}

WordPress Version: 6.2

/**
 * Upgrades the revisions author, adds the current post as a revision and sets the revisions version to 1.
 *
 * @since 3.6.0
 * @access private
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param WP_Post $post      Post object.
 * @param array   $revisions Current revisions of the post.
 * @return bool true if the revisions were upgraded, false if problems.
 */
function _wp_upgrade_revisions_of_post($post, $revisions)
{
    global $wpdb;
    // Add post option exclusively.
    $lock = "revision-upgrade-{$post->ID}";
    $now = time();
    $result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now));
    if (!$result) {
        // If we couldn't get a lock, see how old the previous lock is.
        $locked = get_option($lock);
        if (!$locked) {
            // Can't write to the lock, and can't read the lock.
            // Something broken has happened.
            return false;
        }
        if ($locked > $now - HOUR_IN_SECONDS) {
            // Lock is not too old: some other process may be upgrading this post. Bail.
            return false;
        }
        // Lock is too old - update it (below) and continue.
    }
    // If we could get a lock, re-"add" the option to fire all the correct filters.
    update_option($lock, $now);
    reset($revisions);
    $add_last = true;
    do {
        $this_revision = current($revisions);
        $prev_revision = next($revisions);
        $this_revision_version = _wp_get_post_revision_version($this_revision);
        // Something terrible happened.
        if (false === $this_revision_version) {
            continue;
        }
        // 1 is the latest revision version, so we're already up to date.
        // No need to add a copy of the post as latest revision.
        if (0 < $this_revision_version) {
            $add_last = false;
            continue;
        }
        // Always update the revision version.
        $update = array('post_name' => preg_replace('/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name));
        /*
         * If this revision is the oldest revision of the post, i.e. no $prev_revision,
         * the correct post_author is probably $post->post_author, but that's only a good guess.
         * Update the revision version only and Leave the author as-is.
         */
        if ($prev_revision) {
            $prev_revision_version = _wp_get_post_revision_version($prev_revision);
            // If the previous revision is already up to date, it no longer has the information we need :(
            if ($prev_revision_version < 1) {
                $update['post_author'] = $prev_revision->post_author;
            }
        }
        // Upgrade this revision.
        $result = $wpdb->update($wpdb->posts, $update, array('ID' => $this_revision->ID));
        if ($result) {
            wp_cache_delete($this_revision->ID, 'posts');
        }
    } while ($prev_revision);
    delete_option($lock);
    // Add a copy of the post as latest revision.
    if ($add_last) {
        wp_save_post_revision($post->ID);
    }
    return true;
}

WordPress Version: 6.1

/**
 * Upgrades the revisions author, adds the current post as a revision and sets the revisions version to 1.
 *
 * @since 3.6.0
 * @access private
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param WP_Post $post      Post object.
 * @param array   $revisions Current revisions of the post.
 * @return bool true if the revisions were upgraded, false if problems.
 */
function _wp_upgrade_revisions_of_post($post, $revisions)
{
    global $wpdb;
    // Add post option exclusively.
    $lock = "revision-upgrade-{$post->ID}";
    $now = time();
    $result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now));
    if (!$result) {
        // If we couldn't get a lock, see how old the previous lock is.
        $locked = get_option($lock);
        if (!$locked) {
            // Can't write to the lock, and can't read the lock.
            // Something broken has happened.
            return false;
        }
        if ($locked > $now - 3600) {
            // Lock is not too old: some other process may be upgrading this post. Bail.
            return false;
        }
        // Lock is too old - update it (below) and continue.
    }
    // If we could get a lock, re-"add" the option to fire all the correct filters.
    update_option($lock, $now);
    reset($revisions);
    $add_last = true;
    do {
        $this_revision = current($revisions);
        $prev_revision = next($revisions);
        $this_revision_version = _wp_get_post_revision_version($this_revision);
        // Something terrible happened.
        if (false === $this_revision_version) {
            continue;
        }
        // 1 is the latest revision version, so we're already up to date.
        // No need to add a copy of the post as latest revision.
        if (0 < $this_revision_version) {
            $add_last = false;
            continue;
        }
        // Always update the revision version.
        $update = array('post_name' => preg_replace('/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name));
        /*
         * If this revision is the oldest revision of the post, i.e. no $prev_revision,
         * the correct post_author is probably $post->post_author, but that's only a good guess.
         * Update the revision version only and Leave the author as-is.
         */
        if ($prev_revision) {
            $prev_revision_version = _wp_get_post_revision_version($prev_revision);
            // If the previous revision is already up to date, it no longer has the information we need :(
            if ($prev_revision_version < 1) {
                $update['post_author'] = $prev_revision->post_author;
            }
        }
        // Upgrade this revision.
        $result = $wpdb->update($wpdb->posts, $update, array('ID' => $this_revision->ID));
        if ($result) {
            wp_cache_delete($this_revision->ID, 'posts');
        }
    } while ($prev_revision);
    delete_option($lock);
    // Add a copy of the post as latest revision.
    if ($add_last) {
        wp_save_post_revision($post->ID);
    }
    return true;
}

WordPress Version: 5.4

/**
 * Upgrade the revisions author, add the current post as a revision and set the revisions version to 1
 *
 * @since 3.6.0
 * @access private
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param WP_Post $post      Post object
 * @param array   $revisions Current revisions of the post
 * @return bool true if the revisions were upgraded, false if problems
 */
function _wp_upgrade_revisions_of_post($post, $revisions)
{
    global $wpdb;
    // Add post option exclusively.
    $lock = "revision-upgrade-{$post->ID}";
    $now = time();
    $result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now));
    if (!$result) {
        // If we couldn't get a lock, see how old the previous lock is.
        $locked = get_option($lock);
        if (!$locked) {
            // Can't write to the lock, and can't read the lock.
            // Something broken has happened.
            return false;
        }
        if ($locked > $now - 3600) {
            // Lock is not too old: some other process may be upgrading this post. Bail.
            return false;
        }
        // Lock is too old - update it (below) and continue.
    }
    // If we could get a lock, re-"add" the option to fire all the correct filters.
    update_option($lock, $now);
    reset($revisions);
    $add_last = true;
    do {
        $this_revision = current($revisions);
        $prev_revision = next($revisions);
        $this_revision_version = _wp_get_post_revision_version($this_revision);
        // Something terrible happened.
        if (false === $this_revision_version) {
            continue;
        }
        // 1 is the latest revision version, so we're already up to date.
        // No need to add a copy of the post as latest revision.
        if (0 < $this_revision_version) {
            $add_last = false;
            continue;
        }
        // Always update the revision version.
        $update = array('post_name' => preg_replace('/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name));
        /*
         * If this revision is the oldest revision of the post, i.e. no $prev_revision,
         * the correct post_author is probably $post->post_author, but that's only a good guess.
         * Update the revision version only and Leave the author as-is.
         */
        if ($prev_revision) {
            $prev_revision_version = _wp_get_post_revision_version($prev_revision);
            // If the previous revision is already up to date, it no longer has the information we need :(
            if ($prev_revision_version < 1) {
                $update['post_author'] = $prev_revision->post_author;
            }
        }
        // Upgrade this revision.
        $result = $wpdb->update($wpdb->posts, $update, array('ID' => $this_revision->ID));
        if ($result) {
            wp_cache_delete($this_revision->ID, 'posts');
        }
    } while ($prev_revision);
    delete_option($lock);
    // Add a copy of the post as latest revision.
    if ($add_last) {
        wp_save_post_revision($post->ID);
    }
    return true;
}

WordPress Version: 4.4

/**
 * Upgrade the revisions author, add the current post as a revision and set the revisions version to 1
 *
 * @since 3.6.0
 * @access private
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param WP_Post $post      Post object
 * @param array   $revisions Current revisions of the post
 * @return bool true if the revisions were upgraded, false if problems
 */
function _wp_upgrade_revisions_of_post($post, $revisions)
{
    global $wpdb;
    // Add post option exclusively
    $lock = "revision-upgrade-{$post->ID}";
    $now = time();
    $result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now));
    if (!$result) {
        // If we couldn't get a lock, see how old the previous lock is
        $locked = get_option($lock);
        if (!$locked) {
            // Can't write to the lock, and can't read the lock.
            // Something broken has happened
            return false;
        }
        if ($locked > $now - 3600) {
            // Lock is not too old: some other process may be upgrading this post.  Bail.
            return false;
        }
        // Lock is too old - update it (below) and continue
    }
    // If we could get a lock, re-"add" the option to fire all the correct filters.
    update_option($lock, $now);
    reset($revisions);
    $add_last = true;
    do {
        $this_revision = current($revisions);
        $prev_revision = next($revisions);
        $this_revision_version = _wp_get_post_revision_version($this_revision);
        // Something terrible happened
        if (false === $this_revision_version) {
            continue;
        }
        // 1 is the latest revision version, so we're already up to date.
        // No need to add a copy of the post as latest revision.
        if (0 < $this_revision_version) {
            $add_last = false;
            continue;
        }
        // Always update the revision version
        $update = array('post_name' => preg_replace('/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name));
        // If this revision is the oldest revision of the post, i.e. no $prev_revision,
        // the correct post_author is probably $post->post_author, but that's only a good guess.
        // Update the revision version only and Leave the author as-is.
        if ($prev_revision) {
            $prev_revision_version = _wp_get_post_revision_version($prev_revision);
            // If the previous revision is already up to date, it no longer has the information we need :(
            if ($prev_revision_version < 1) {
                $update['post_author'] = $prev_revision->post_author;
            }
        }
        // Upgrade this revision
        $result = $wpdb->update($wpdb->posts, $update, array('ID' => $this_revision->ID));
        if ($result) {
            wp_cache_delete($this_revision->ID, 'posts');
        }
    } while ($prev_revision);
    delete_option($lock);
    // Add a copy of the post as latest revision.
    if ($add_last) {
        wp_save_post_revision($post->ID);
    }
    return true;
}

WordPress Version: 4.3

/**
 * Upgrade the revisions author, add the current post as a revision and set the revisions version to 1
 *
 * @since 3.6.0
 * @access private
 *
 * @global wpdb $wpdb
 *
 * @param WP_Post $post      Post object
 * @param array   $revisions Current revisions of the post
 * @return bool true if the revisions were upgraded, false if problems
 */
function _wp_upgrade_revisions_of_post($post, $revisions)
{
    global $wpdb;
    // Add post option exclusively
    $lock = "revision-upgrade-{$post->ID}";
    $now = time();
    $result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now));
    if (!$result) {
        // If we couldn't get a lock, see how old the previous lock is
        $locked = get_option($lock);
        if (!$locked) {
            // Can't write to the lock, and can't read the lock.
            // Something broken has happened
            return false;
        }
        if ($locked > $now - 3600) {
            // Lock is not too old: some other process may be upgrading this post.  Bail.
            return false;
        }
        // Lock is too old - update it (below) and continue
    }
    // If we could get a lock, re-"add" the option to fire all the correct filters.
    update_option($lock, $now);
    reset($revisions);
    $add_last = true;
    do {
        $this_revision = current($revisions);
        $prev_revision = next($revisions);
        $this_revision_version = _wp_get_post_revision_version($this_revision);
        // Something terrible happened
        if (false === $this_revision_version) {
            continue;
        }
        // 1 is the latest revision version, so we're already up to date.
        // No need to add a copy of the post as latest revision.
        if (0 < $this_revision_version) {
            $add_last = false;
            continue;
        }
        // Always update the revision version
        $update = array('post_name' => preg_replace('/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name));
        // If this revision is the oldest revision of the post, i.e. no $prev_revision,
        // the correct post_author is probably $post->post_author, but that's only a good guess.
        // Update the revision version only and Leave the author as-is.
        if ($prev_revision) {
            $prev_revision_version = _wp_get_post_revision_version($prev_revision);
            // If the previous revision is already up to date, it no longer has the information we need :(
            if ($prev_revision_version < 1) {
                $update['post_author'] = $prev_revision->post_author;
            }
        }
        // Upgrade this revision
        $result = $wpdb->update($wpdb->posts, $update, array('ID' => $this_revision->ID));
        if ($result) {
            wp_cache_delete($this_revision->ID, 'posts');
        }
    } while ($prev_revision);
    delete_option($lock);
    // Add a copy of the post as latest revision.
    if ($add_last) {
        wp_save_post_revision($post->ID);
    }
    return true;
}

WordPress Version: 4.1

/**
 * Upgrade the revisions author, add the current post as a revision and set the revisions version to 1
 *
 * @since 3.6.0
 * @access private
 *
 * @param WP_Post $post Post object
 * @param array $revisions Current revisions of the post
 * @return bool true if the revisions were upgraded, false if problems
 */
function _wp_upgrade_revisions_of_post($post, $revisions)
{
    global $wpdb;
    // Add post option exclusively
    $lock = "revision-upgrade-{$post->ID}";
    $now = time();
    $result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now));
    if (!$result) {
        // If we couldn't get a lock, see how old the previous lock is
        $locked = get_option($lock);
        if (!$locked) {
            // Can't write to the lock, and can't read the lock.
            // Something broken has happened
            return false;
        }
        if ($locked > $now - 3600) {
            // Lock is not too old: some other process may be upgrading this post.  Bail.
            return false;
        }
        // Lock is too old - update it (below) and continue
    }
    // If we could get a lock, re-"add" the option to fire all the correct filters.
    update_option($lock, $now);
    reset($revisions);
    $add_last = true;
    do {
        $this_revision = current($revisions);
        $prev_revision = next($revisions);
        $this_revision_version = _wp_get_post_revision_version($this_revision);
        // Something terrible happened
        if (false === $this_revision_version) {
            continue;
        }
        // 1 is the latest revision version, so we're already up to date.
        // No need to add a copy of the post as latest revision.
        if (0 < $this_revision_version) {
            $add_last = false;
            continue;
        }
        // Always update the revision version
        $update = array('post_name' => preg_replace('/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name));
        // If this revision is the oldest revision of the post, i.e. no $prev_revision,
        // the correct post_author is probably $post->post_author, but that's only a good guess.
        // Update the revision version only and Leave the author as-is.
        if ($prev_revision) {
            $prev_revision_version = _wp_get_post_revision_version($prev_revision);
            // If the previous revision is already up to date, it no longer has the information we need :(
            if ($prev_revision_version < 1) {
                $update['post_author'] = $prev_revision->post_author;
            }
        }
        // Upgrade this revision
        $result = $wpdb->update($wpdb->posts, $update, array('ID' => $this_revision->ID));
        if ($result) {
            wp_cache_delete($this_revision->ID, 'posts');
        }
    } while ($prev_revision);
    delete_option($lock);
    // Add a copy of the post as latest revision.
    if ($add_last) {
        wp_save_post_revision($post->ID);
    }
    return true;
}

WordPress Version: 3.7

/**
 * Upgrade the revisions author, add the current post as a revision and set the revisions version to 1
 *
 * @since 3.6.0
 * @access private
 *
 * @uses wp_get_post_revisions()
 *
 * @param object $post Post object
 * @param array $revisions Current revisions of the post
 * @return bool true if the revisions were upgraded, false if problems
 */
function _wp_upgrade_revisions_of_post($post, $revisions)
{
    global $wpdb;
    // Add post option exclusively
    $lock = "revision-upgrade-{$post->ID}";
    $now = time();
    $result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, 'no') /* LOCK */", $lock, $now));
    if (!$result) {
        // If we couldn't get a lock, see how old the previous lock is
        $locked = get_option($lock);
        if (!$locked) {
            // Can't write to the lock, and can't read the lock.
            // Something broken has happened
            return false;
        }
        if ($locked > $now - 3600) {
            // Lock is not too old: some other process may be upgrading this post.  Bail.
            return false;
        }
        // Lock is too old - update it (below) and continue
    }
    // If we could get a lock, re-"add" the option to fire all the correct filters.
    update_option($lock, $now);
    reset($revisions);
    $add_last = true;
    do {
        $this_revision = current($revisions);
        $prev_revision = next($revisions);
        $this_revision_version = _wp_get_post_revision_version($this_revision);
        // Something terrible happened
        if (false === $this_revision_version) {
            continue;
        }
        // 1 is the latest revision version, so we're already up to date.
        // No need to add a copy of the post as latest revision.
        if (0 < $this_revision_version) {
            $add_last = false;
            continue;
        }
        // Always update the revision version
        $update = array('post_name' => preg_replace('/^(\d+-(?:autosave|revision))[\d-]*$/', '$1-v1', $this_revision->post_name));
        // If this revision is the oldest revision of the post, i.e. no $prev_revision,
        // the correct post_author is probably $post->post_author, but that's only a good guess.
        // Update the revision version only and Leave the author as-is.
        if ($prev_revision) {
            $prev_revision_version = _wp_get_post_revision_version($prev_revision);
            // If the previous revision is already up to date, it no longer has the information we need :(
            if ($prev_revision_version < 1) {
                $update['post_author'] = $prev_revision->post_author;
            }
        }
        // Upgrade this revision
        $result = $wpdb->update($wpdb->posts, $update, array('ID' => $this_revision->ID));
        if ($result) {
            wp_cache_delete($this_revision->ID, 'posts');
        }
    } while ($prev_revision);
    delete_option($lock);
    // Add a copy of the post as latest revision.
    if ($add_last) {
        wp_save_post_revision($post->ID);
    }
    return true;
}