diff -r 34716fd837a4 -r be944660c56a wp/wp-admin/includes/post.php --- a/wp/wp-admin/includes/post.php Tue Dec 15 15:52:01 2020 +0100 +++ b/wp/wp-admin/includes/post.php Wed Sep 21 18:19:35 2022 +0200 @@ -169,24 +169,27 @@ } if ( ! empty( $post_data['edit_date'] ) ) { - $aa = $post_data['aa']; - $mm = $post_data['mm']; - $jj = $post_data['jj']; - $hh = $post_data['hh']; - $mn = $post_data['mn']; - $ss = $post_data['ss']; - $aa = ( $aa <= 0 ) ? gmdate( 'Y' ) : $aa; - $mm = ( $mm <= 0 ) ? gmdate( 'n' ) : $mm; - $jj = ( $jj > 31 ) ? 31 : $jj; - $jj = ( $jj <= 0 ) ? gmdate( 'j' ) : $jj; - $hh = ( $hh > 23 ) ? $hh - 24 : $hh; - $mn = ( $mn > 59 ) ? $mn - 60 : $mn; - $ss = ( $ss > 59 ) ? $ss - 60 : $ss; + $aa = $post_data['aa']; + $mm = $post_data['mm']; + $jj = $post_data['jj']; + $hh = $post_data['hh']; + $mn = $post_data['mn']; + $ss = $post_data['ss']; + $aa = ( $aa <= 0 ) ? gmdate( 'Y' ) : $aa; + $mm = ( $mm <= 0 ) ? gmdate( 'n' ) : $mm; + $jj = ( $jj > 31 ) ? 31 : $jj; + $jj = ( $jj <= 0 ) ? gmdate( 'j' ) : $jj; + $hh = ( $hh > 23 ) ? $hh - 24 : $hh; + $mn = ( $mn > 59 ) ? $mn - 60 : $mn; + $ss = ( $ss > 59 ) ? $ss - 60 : $ss; + $post_data['post_date'] = sprintf( '%04d-%02d-%02d %02d:%02d:%02d', $aa, $mm, $jj, $hh, $mn, $ss ); - $valid_date = wp_checkdate( $mm, $jj, $aa, $post_data['post_date'] ); + + $valid_date = wp_checkdate( $mm, $jj, $aa, $post_data['post_date'] ); if ( ! $valid_date ) { return new WP_Error( 'invalid_date', __( 'Invalid date.' ) ); } + $post_data['post_date_gmt'] = get_gmt_from_date( $post_data['post_date'] ); } @@ -246,8 +249,9 @@ // Clear out any data in internal vars. unset( $post_data['filter'] ); - $post_ID = (int) $post_data['post_ID']; - $post = get_post( $post_ID ); + $post_ID = (int) $post_data['post_ID']; + $post = get_post( $post_ID ); + $post_data['post_type'] = $post->post_type; $post_data['post_mime_type'] = $post->post_mime_type; @@ -685,12 +689,15 @@ 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft', - ) + ), + false, + false ); $post = get_post( $post_id ); if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) ) { set_post_format( $post, get_option( 'default_post_format' ) ); } + wp_after_insert_post( $post, false, null ); // Schedule auto-draft cleanup. if ( ! wp_next_scheduled( 'wp_scheduled_auto_draft_delete' ) ) { @@ -756,6 +763,7 @@ * * @since 2.0.0 * @since 5.2.0 Added the `$type` parameter. + * @since 5.8.0 Added the `$status` parameter. * * @global wpdb $wpdb WordPress database abstraction object. * @@ -763,15 +771,17 @@ * @param string $content Optional post content. * @param string $date Optional post date. * @param string $type Optional post type. + * @param string $status Optional post status. * @return int Post ID if post exists, 0 otherwise. */ -function post_exists( $title, $content = '', $date = '', $type = '' ) { +function post_exists( $title, $content = '', $date = '', $type = '', $status = '' ) { global $wpdb; $post_title = wp_unslash( sanitize_post_field( 'post_title', $title, 0, 'db' ) ); $post_content = wp_unslash( sanitize_post_field( 'post_content', $content, 0, 'db' ) ); $post_date = wp_unslash( sanitize_post_field( 'post_date', $date, 0, 'db' ) ); $post_type = wp_unslash( sanitize_post_field( 'post_type', $type, 0, 'db' ) ); + $post_status = wp_unslash( sanitize_post_field( 'post_status', $status, 0, 'db' ) ); $query = "SELECT ID FROM $wpdb->posts WHERE 1=1"; $args = array(); @@ -796,6 +806,11 @@ $args[] = $post_type; } + if ( ! empty( $status ) ) { + $query .= ' AND post_status = %s'; + $args[] = $post_status; + } + if ( ! empty( $args ) ) { return (int) $wpdb->get_var( $wpdb->prepare( $query, $args ) ); } @@ -810,7 +825,7 @@ * * @global WP_User $current_user * - * @return int|WP_Error + * @return int|WP_Error Post ID on success, WP_Error on failure. */ function wp_write_post() { if ( isset( $_POST['post_type'] ) ) { @@ -886,7 +901,7 @@ * * @since 2.0.0 * - * @return int|null + * @return int|void Post ID on success, void on failure. */ function write_post() { $result = wp_write_post(); @@ -1112,7 +1127,7 @@ * * @since 2.5.0 * - * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal. + * @param array|false $q Array of query variables to use to build the query or false to use $_GET superglobal. * @return array */ function wp_edit_posts_query( $q = false ) { @@ -1165,8 +1180,11 @@ * * The dynamic portion of the hook name, `$post_type`, refers to the post type. * - * Some examples of filter hooks generated here include: 'edit_attachment_per_page', - * 'edit_post_per_page', 'edit_page_per_page', etc. + * Possible hook names include: + * + * - `edit_post_per_page` + * - `edit_page_per_page` + * - `edit_attachment_per_page` * * @since 3.0.0 * @@ -1332,9 +1350,9 @@ * * @since 2.5.0 * - * @param int $id Post ID or post object. - * @param string $title Optional. Title to override the post's current title when generating the post name. Default null. - * @param string $name Optional. Name to override the post name. Default null. + * @param int|WP_Post $id Post ID or post object. + * @param string $title Optional. Title to override the post's current title when generating the post name. Default null. + * @param string $name Optional. Name to override the post name. Default null. * @return array { * Array containing the sample permalink with placeholder for the post name, and the post name. * @@ -1354,7 +1372,7 @@ $original_date = $post->post_date; $original_name = $post->post_name; - // Hack: get_permalink() would return ugly permalink for drafts, so we will fake that our post is published. + // Hack: get_permalink() would return plain permalink for drafts, so we will fake that our post is published. if ( in_array( $post->post_status, array( 'draft', 'pending', 'future' ), true ) ) { $post->post_status = 'publish'; $post->post_name = sanitize_title( $post->post_name ? $post->post_name : $post->post_title, $post->ID ); @@ -1536,15 +1554,12 @@ * * Note: When a theme adds 'post-thumbnail' support, a special 'post-thumbnail' * image size is registered, which differs from the 'thumbnail' image size - * managed via the Settings > Media screen. See the `$size` parameter description - * for more information on default values. + * managed via the Settings > Media screen. * * @since 4.4.0 * - * @param string|array $size Post thumbnail image size to display in the meta box. Accepts any valid - * image size, or an array of width and height values in pixels (in that order). - * If the 'post-thumbnail' size is set, default is 'post-thumbnail'. Otherwise, - * default is an array with 266 as both the height and width values. + * @param string|int[] $size Requested image size. Can be any registered image size name, or + * an array of width and height values in pixels (in that order). * @param int $thumbnail_id Post thumbnail attachment ID. * @param WP_Post $post The post object associated with the thumbnail. */ @@ -1585,7 +1600,7 @@ * * @since 2.5.0 * - * @param int $post_id ID of the post to check for editing. + * @param int|WP_Post $post_id ID or object of the post to check for editing. * @return int|false ID of the user with lock. False if the post does not exist, post is not locked, * the user with lock does not exist, or the post is locked by current user. */ @@ -1623,7 +1638,7 @@ * * @since 2.5.0 * - * @param int $post_id ID of the post being edited. + * @param int|WP_Post $post_id ID or object of the post being edited. * @return array|false Array of the lock time and user ID. False if the post does not exist, or * there is no current user. */ @@ -1741,10 +1756,10 @@ display_name ) ); + printf( __( '%s is currently editing this post. Do you want to take over?' ), esc_html( $user->display_name ) ); } else { /* translators: %s: User's display name. */ - printf( __( '%s is already editing this post.' ), esc_html( $user->display_name ) ); + printf( __( '%s is currently editing this post.' ), esc_html( $user->display_name ) ); } ?>

@@ -1926,7 +1941,7 @@ } if ( isset( $_POST['_thumbnail_id'] ) ) { - $query_args['_thumbnail_id'] = ( intval( $_POST['_thumbnail_id'] ) <= 0 ) ? '-1' : intval( $_POST['_thumbnail_id'] ); + $query_args['_thumbnail_id'] = ( (int) $_POST['_thumbnail_id'] <= 0 ) ? '-1' : (int) $_POST['_thumbnail_id']; } } @@ -2088,7 +2103,7 @@ ); if ( ! empty( $_term ) ) { - $clean_terms[] = intval( $_term[0] ); + $clean_terms[] = (int) $_term[0]; } else { // No existing term was found, so pass the string. A new term will be created. $clean_terms[] = $term; @@ -2119,15 +2134,10 @@ return false; } - // The posts page can't be edited in the block editor. - if ( absint( get_option( 'page_for_posts' ) ) === $post->ID && empty( $post->post_content ) ) { - return false; - } - $use_block_editor = use_block_editor_for_post_type( $post->post_type ); /** - * Filter whether a post is able to be edited in the block editor. + * Filters whether a post is able to be edited in the block editor. * * @since 5.0.0 * @@ -2163,7 +2173,7 @@ } /** - * Filter whether a post is able to be edited in the block editor. + * Filters whether a post is able to be edited in the block editor. * * @since 5.0.0 * @@ -2174,59 +2184,6 @@ } /** - * Returns all the block categories that will be shown in the block editor. - * - * @since 5.0.0 - * - * @param WP_Post $post Post object. - * @return array[] Array of block categories. - */ -function get_block_categories( $post ) { - $default_categories = array( - array( - 'slug' => 'text', - 'title' => _x( 'Text', 'block category' ), - 'icon' => null, - ), - array( - 'slug' => 'media', - 'title' => _x( 'Media', 'block category' ), - 'icon' => null, - ), - array( - 'slug' => 'design', - 'title' => _x( 'Design', 'block category' ), - 'icon' => null, - ), - array( - 'slug' => 'widgets', - 'title' => _x( 'Widgets', 'block category' ), - 'icon' => null, - ), - array( - 'slug' => 'embed', - 'title' => _x( 'Embeds', 'block category' ), - 'icon' => null, - ), - array( - 'slug' => 'reusable', - 'title' => _x( 'Reusable Blocks', 'block category' ), - 'icon' => null, - ), - ); - - /** - * Filter the default array of block categories. - * - * @since 5.0.0 - * - * @param array[] $default_categories Array of block categories. - * @param WP_Post $post Post being loaded. - */ - return apply_filters( 'block_categories', $default_categories, $post ); -} - -/** * Prepares server-registered blocks for the block editor. * * Returns an associative array of registered block data keyed by block name. Data includes properties @@ -2240,19 +2197,21 @@ $block_registry = WP_Block_Type_Registry::get_instance(); $blocks = array(); $fields_to_pick = array( + 'api_version' => 'apiVersion', 'title' => 'title', 'description' => 'description', 'icon' => 'icon', - 'category' => 'category', - 'keywords' => 'keywords', - 'parent' => 'parent', - 'supports' => 'supports', 'attributes' => 'attributes', 'provides_context' => 'providesContext', 'uses_context' => 'usesContext', + 'supports' => 'supports', + 'category' => 'category', 'styles' => 'styles', 'textdomain' => 'textdomain', + 'parent' => 'parent', + 'keywords' => 'keywords', 'example' => 'example', + 'variations' => 'variations', ); foreach ( $block_registry->get_all_registered() as $block_name => $block_type ) { @@ -2302,8 +2261,8 @@
-
- + +