WordPress Version: 4.5
/**
* Restores a post to the specified revision.
*
* Can restore a past revision using all fields of the post revision, or only selected fields.
*
* @since 2.6.0
*
* @param int|WP_Post $revision_id Revision ID or revision object.
* @param array $fields Optional. What fields to restore from. Defaults to all.
* @return int|false|null Null if error, false if no fields to restore, (int) post ID if success.
*/
function wp_restore_post_revision($revision_id, $fields = null)
{
if (!$revision = wp_get_post_revision($revision_id, ARRAY_A)) {
return $revision;
}
if (!is_array($fields)) {
$fields = array_keys(_wp_post_revision_fields($revision));
}
$update = array();
foreach (array_intersect(array_keys($revision), $fields) as $field) {
$update[$field] = $revision[$field];
}
if (!$update) {
return false;
}
$update['ID'] = $revision['post_parent'];
$update = wp_slash($update);
//since data is from db
$post_id = wp_update_post($update);
if (!$post_id || is_wp_error($post_id)) {
return $post_id;
}
// Add restore from details
$restore_details = array('restored_revision_id' => $revision_id, 'restored_by_user' => get_current_user_id(), 'restored_time' => time());
update_post_meta($post_id, '_post_restored_from', $restore_details);
// Update last edit user
update_post_meta($post_id, '_edit_last', get_current_user_id());
/**
* Fires after a post revision has been restored.
*
* @since 2.6.0
*
* @param int $post_id Post ID.
* @param int $revision_id Post revision ID.
*/
do_action('wp_restore_post_revision', $post_id, $revision['ID']);
return $post_id;
}