Exemplo n.º 1
0
/**
 * 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);
}
Exemplo n.º 2
0
/**
 * 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);
}