diff --git a/wp-includes/post.php b/wp-includes/post.php index 2043f932ed..dde54c510d 100644 --- a/wp-includes/post.php +++ b/wp-includes/post.php @@ -337,14 +337,15 @@ function create_initial_post_types() { register_post_status( 'draft', array( - 'label' => _x( 'Draft', 'post status' ), - 'protected' => true, - '_builtin' => true, /* internal use only. */ + 'label' => _x( 'Draft', 'post status' ), + 'protected' => true, + '_builtin' => true, /* internal use only. */ /* translators: %s: Number of draft posts. */ - 'label_count' => _n_noop( + 'label_count' => _n_noop( 'Draft (%s)', 'Drafts (%s)' ), + 'date_floating' => true, ) ); @@ -394,9 +395,10 @@ function create_initial_post_types() { register_post_status( 'auto-draft', array( - 'label' => 'auto-draft', - 'internal' => true, - '_builtin' => true, /* internal use only. */ + 'label' => 'auto-draft', + 'internal' => true, + '_builtin' => true, /* internal use only. */ + 'date_floating' => true, ) ); @@ -1018,6 +1020,8 @@ function _wp_privacy_statuses() { * the top of the edit listings, * e.g. All (12) | Published (9) | My Custom Status (2) * Default is value of $internal. + * @type bool $date_floating Whether the post has a floating creation date. + * Default to false. * } * @return object */ @@ -1041,6 +1045,7 @@ function register_post_status( $post_status, $args = array() ) { 'publicly_queryable' => null, 'show_in_admin_status_list' => null, 'show_in_admin_all_list' => null, + 'date_floating' => null, ); $args = wp_parse_args( $args, $defaults ); $args = (object) $args; @@ -1085,6 +1090,10 @@ function register_post_status( $post_status, $args = array() ) { $args->show_in_admin_status_list = ! $args->internal; } + if ( null === $args->date_floating ) { + $args->date_floating = false; + } + if ( false === $args->label ) { $args->label = $post_status; } diff --git a/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php b/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php index 155c8aaa96..c0cce245ba 100644 --- a/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php +++ b/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php @@ -234,6 +234,10 @@ class WP_REST_Post_Statuses_Controller extends WP_REST_Controller { $data['slug'] = $status->name; } + if ( in_array( 'date_floating', $fields, true ) ) { + $data['date_floating'] = $status->date_floating; + } + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); @@ -277,48 +281,54 @@ class WP_REST_Post_Statuses_Controller extends WP_REST_Controller { 'title' => 'status', 'type' => 'object', 'properties' => array( - 'name' => array( + 'name' => array( 'description' => __( 'The title for the status.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), - 'private' => array( + 'private' => array( 'description' => __( 'Whether posts with this status should be private.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), - 'protected' => array( + 'protected' => array( 'description' => __( 'Whether posts with this status should be protected.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), - 'public' => array( + 'public' => array( 'description' => __( 'Whether posts of this status should be shown in the front end of the site.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), - 'queryable' => array( + 'queryable' => array( 'description' => __( 'Whether posts with this status should be publicly-queryable.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), - 'show_in_list' => array( + 'show_in_list' => array( 'description' => __( 'Whether to include posts in the edit listing for their post type.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), - 'slug' => array( + 'slug' => array( 'description' => __( 'An alphanumeric identifier for the status.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), + 'date_floating' => array( + 'description' => __( 'Whether posts of this status may have floating published dates.' ), + 'type' => 'boolean', + 'context' => array( 'view', 'edit' ), + 'readonly' => true, + ), ), ); diff --git a/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php index b1e2836af2..d355c3d076 100644 --- a/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php +++ b/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php @@ -1021,16 +1021,18 @@ class WP_REST_Posts_Controller extends WP_REST_Controller { // Post date. if ( ! empty( $schema['properties']['date'] ) && ! empty( $request['date'] ) ) { - $date_data = rest_get_date_with_gmt( $request['date'] ); + $current_date = isset( $prepared_post->ID ) ? get_post( $prepared_post->ID )->post_date : false; + $date_data = rest_get_date_with_gmt( $request['date'] ); - if ( ! empty( $date_data ) ) { + if ( ! empty( $date_data ) && $current_date !== $date_data[0] ) { list( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data; $prepared_post->edit_date = true; } } elseif ( ! empty( $schema['properties']['date_gmt'] ) && ! empty( $request['date_gmt'] ) ) { - $date_data = rest_get_date_with_gmt( $request['date_gmt'], true ); + $current_date = isset( $prepared_post->ID ) ? get_post( $prepared_post->ID )->post_date_gmt : false; + $date_data = rest_get_date_with_gmt( $request['date_gmt'], true ); - if ( ! empty( $date_data ) ) { + if ( ! empty( $date_data ) && $current_date !== $date_data[1] ) { list( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data; $prepared_post->edit_date = true; } diff --git a/wp-includes/version.php b/wp-includes/version.php index 0832472ffa..a5eb1b260a 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -13,7 +13,7 @@ * * @global string $wp_version */ -$wp_version = '5.3-alpha-46251'; +$wp_version = '5.3-alpha-46252'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.