Merged in feature/81-dev-dev01 (pull request #5)
auto-patch 81-dev-dev01-2023-12-05T22_45_26 * auto-patch 81-dev-dev01-2023-12-05T22_45_26
This commit is contained in:
@@ -65,8 +65,13 @@ class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {
|
||||
$parent_controller = new WP_REST_Posts_Controller( $parent_post_type );
|
||||
}
|
||||
|
||||
$this->parent_controller = $parent_controller;
|
||||
$this->revisions_controller = new WP_REST_Revisions_Controller( $parent_post_type );
|
||||
$this->parent_controller = $parent_controller;
|
||||
|
||||
$revisions_controller = $post_type_object->get_revisions_rest_controller();
|
||||
if ( ! $revisions_controller ) {
|
||||
$revisions_controller = new WP_REST_Revisions_Controller( $parent_post_type );
|
||||
}
|
||||
$this->revisions_controller = $revisions_controller;
|
||||
$this->rest_base = 'autosaves';
|
||||
$this->parent_base = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name;
|
||||
$this->namespace = ! empty( $post_type_object->rest_namespace ) ? $post_type_object->rest_namespace : 'wp/v2';
|
||||
@@ -131,7 +136,6 @@ class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {
|
||||
'schema' => array( $this, 'get_public_item_schema' ),
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -206,11 +210,11 @@ class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {
|
||||
*/
|
||||
public function create_item( $request ) {
|
||||
|
||||
if ( ! defined( 'DOING_AUTOSAVE' ) ) {
|
||||
if ( ! defined( 'WP_RUN_CORE_TESTS' ) && ! defined( 'DOING_AUTOSAVE' ) ) {
|
||||
define( 'DOING_AUTOSAVE', true );
|
||||
}
|
||||
|
||||
$post = get_post( $request['id'] );
|
||||
$post = $this->get_parent( $request['id'] );
|
||||
|
||||
if ( is_wp_error( $post ) ) {
|
||||
return $post;
|
||||
@@ -235,8 +239,8 @@ class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {
|
||||
*/
|
||||
$autosave_id = wp_update_post( wp_slash( (array) $prepared_post ), true );
|
||||
} else {
|
||||
// Non-draft posts: create or update the post autosave.
|
||||
$autosave_id = $this->create_post_autosave( (array) $prepared_post );
|
||||
// Non-draft posts: create or update the post autosave. Pass the meta data.
|
||||
$autosave_id = $this->create_post_autosave( (array) $prepared_post, (array) $request->get_param( 'meta' ) );
|
||||
}
|
||||
|
||||
if ( is_wp_error( $autosave_id ) ) {
|
||||
@@ -349,11 +353,13 @@ class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {
|
||||
* From wp-admin/post.php.
|
||||
*
|
||||
* @since 5.0.0
|
||||
* @since 6.4.0 The `$meta` parameter was added.
|
||||
*
|
||||
* @param array $post_data Associative array containing the post data.
|
||||
* @param array $meta Associative array containing the post meta data.
|
||||
* @return mixed The autosave revision ID or WP_Error.
|
||||
*/
|
||||
public function create_post_autosave( $post_data ) {
|
||||
public function create_post_autosave( $post_data, array $meta = array() ) {
|
||||
|
||||
$post_id = (int) $post_data['ID'];
|
||||
$post = get_post( $post_id );
|
||||
@@ -373,6 +379,21 @@ class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {
|
||||
}
|
||||
}
|
||||
|
||||
// Check if meta values have changed.
|
||||
if ( ! empty( $meta ) ) {
|
||||
$revisioned_meta_keys = wp_post_revision_meta_keys( $post->post_type );
|
||||
foreach ( $revisioned_meta_keys as $meta_key ) {
|
||||
// get_metadata_raw is used to avoid retrieving the default value.
|
||||
$old_meta = get_metadata_raw( 'post', $post_id, $meta_key, true );
|
||||
$new_meta = isset( $meta[ $meta_key ] ) ? $meta[ $meta_key ] : '';
|
||||
|
||||
if ( $new_meta !== $old_meta ) {
|
||||
$autosave_is_different = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$user_id = get_current_user_id();
|
||||
|
||||
// Store one autosave per author. If there is already an autosave, overwrite it.
|
||||
@@ -391,11 +412,26 @@ class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {
|
||||
do_action( 'wp_creating_autosave', $new_autosave );
|
||||
|
||||
// wp_update_post() expects escaped array.
|
||||
return wp_update_post( wp_slash( $new_autosave ) );
|
||||
$revision_id = wp_update_post( wp_slash( $new_autosave ) );
|
||||
} else {
|
||||
// Create the new autosave as a special post revision.
|
||||
$revision_id = _wp_put_post_revision( $post_data, true );
|
||||
}
|
||||
|
||||
// Create the new autosave as a special post revision.
|
||||
return _wp_put_post_revision( $post_data, true );
|
||||
if ( is_wp_error( $revision_id ) || 0 === $revision_id ) {
|
||||
return $revision_id;
|
||||
}
|
||||
|
||||
// Attached any passed meta values that have revisions enabled.
|
||||
if ( ! empty( $meta ) ) {
|
||||
foreach ( $revisioned_meta_keys as $meta_key ) {
|
||||
if ( isset( $meta[ $meta_key ] ) ) {
|
||||
update_metadata( 'post', $revision_id, $meta_key, wp_slash( $meta[ $meta_key ] ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $revision_id;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -410,10 +446,10 @@ class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {
|
||||
*/
|
||||
public function prepare_item_for_response( $item, $request ) {
|
||||
// Restores the more descriptive, specific name for use within this method.
|
||||
$post = $item;
|
||||
$response = $this->revisions_controller->prepare_item_for_response( $post, $request );
|
||||
$post = $item;
|
||||
|
||||
$fields = $this->get_fields_for_response( $request );
|
||||
$response = $this->revisions_controller->prepare_item_for_response( $post, $request );
|
||||
$fields = $this->get_fields_for_response( $request );
|
||||
|
||||
if ( in_array( 'preview_link', $fields, true ) ) {
|
||||
$parent_id = wp_is_post_autosave( $post );
|
||||
|
||||
Reference in New Issue
Block a user