WordPress Version: 4.4
/**
* Post revision functions.
*
* @package WordPress
* @subpackage Post_Revisions
*/
/**
* Determines which fields of posts are to be saved in revisions.
*
* Does two things. If passed a post *array*, it will return a post array ready
* to be inserted into the posts table as a post revision. Otherwise, returns
* an array whose keys are the post fields to be saved for post revisions.
*
* @since 2.6.0
* @access private
*
* @staticvar array $fields
*
* @param array|null $post Optional. A post array to be processed for insertion as a post revision. Default null.
* @param bool $autosave Optional. Is the revision an autosave? Default false.
* @return array Post array ready to be inserted as a post revision or array of fields that can be versioned.
*/
function _wp_post_revision_fields($post = null, $autosave = false)
{
static $fields = null;
if (is_null($fields)) {
// Allow these to be versioned
$fields = array('post_title' => __('Title'), 'post_content' => __('Content'), 'post_excerpt' => __('Excerpt'));
/**
* Filter the list of fields saved in post revisions.
*
* Included by default: 'post_title', 'post_content' and 'post_excerpt'.
*
* Disallowed fields: 'ID', 'post_name', 'post_parent', 'post_date',
* 'post_date_gmt', 'post_status', 'post_type', 'comment_count',
* and 'post_author'.
*
* @since 2.6.0
*
* @param array $fields List of fields to revision. Contains 'post_title',
* 'post_content', and 'post_excerpt' by default.
*/
$fields = apply_filters('_wp_post_revision_fields', $fields);
// WP uses these internally either in versioning or elsewhere - they cannot be versioned
foreach (array('ID', 'post_name', 'post_parent', 'post_date', 'post_date_gmt', 'post_status', 'post_type', 'comment_count', 'post_author') as $protect) {
unset($fields[$protect]);
}
}
if (!is_array($post)) {
return $fields;
}
$return = array();
foreach (array_intersect(array_keys($post), array_keys($fields)) as $field) {
$return[$field] = $post[$field];
}
$return['post_parent'] = $post['ID'];
$return['post_status'] = 'inherit';
$return['post_type'] = 'revision';
$return['post_name'] = $autosave ? "{$post['ID']}-autosave-v1" : "{$post['ID']}-revision-v1";
// "1" is the revisioning system version
$return['post_date'] = isset($post['post_modified']) ? $post['post_modified'] : '';
$return['post_date_gmt'] = isset($post['post_modified_gmt']) ? $post['post_modified_gmt'] : '';
return $return;
}