/** * Filters post meta retrieval to get values from the actual autosave post, * and not its parent. Filters revisioned meta keys only. * * @since 3.6.0 * @access private */ function _wp_preview_meta_filter($value, $object_id, $meta_key, $single) { $post = get_post(); if ($post->ID != $object_id || !in_array($meta_key, _wp_post_revision_meta_keys()) || 'revision' == $post->post_type) { return $value; } $preview = wp_get_post_autosave($post->ID); if (!is_object($preview)) { return $value; } return get_post_meta($preview->ID, $meta_key, $single); }
/** * Creates autosave data for the specified post from $_POST data. * * @package WordPress * @subpackage Post_Revisions * @since 2.6.0 * * @uses _wp_translate_postdata() * @uses _wp_post_revision_fields() * * @return unknown */ function wp_create_post_autosave($post_id) { $translated = _wp_translate_postdata(true); if (is_wp_error($translated)) { return $translated; } $post_author = get_current_user_id(); // Store one autosave per author. If there is already an autosave, overwrite it. if ($old_autosave = wp_get_post_autosave($post_id, $post_author)) { $new_autosave = _wp_post_revision_fields($_POST, true); $new_autosave['ID'] = $old_autosave->ID; $new_autosave['post_author'] = $post_author; // Auto-save revisioned meta fields. foreach (_wp_post_revision_meta_keys() as $meta_key) { if (isset($_POST[$meta_key]) && get_post_meta($new_autosave['ID'], $meta_key, true) != $_POST[$meta_key]) { // Use the underlying delete_metadata and add_metadata vs delete_post_meta // and add_post_meta to make sure we're working with the actual revision meta. delete_metadata('post', $new_autosave['ID'], $meta_key); if (!empty($_POST[$meta_key])) { add_metadata('post', $new_autosave['ID'], $meta_key, $_POST[$meta_key]); } } } // Save the post format if different if (isset($_POST['post_format']) && get_post_meta($new_autosave['ID'], '_revision_post_format', true) != $_POST['post_format']) { delete_metadata('post', $new_autosave['ID'], '_revision_post_format'); if (!empty($_POST['post_format'])) { add_metadata('post', $new_autosave['ID'], '_revision_post_format', $_POST['post_format']); } } return wp_update_post($new_autosave); } // _wp_put_post_revision() expects unescaped. $_POST = wp_unslash($_POST); // Otherwise create the new autosave as a special post revision return _wp_put_post_revision($_POST, true); }