--- 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 @@
<?php
if ( $override ) {
/* translators: %s: User's display name. */
- printf( __( '%s is already editing this post. Do you want to take over?' ), esc_html( $user->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 ) );
}
?>
</p>
@@ -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 @@
<form class="metabox-base-form">
<?php the_block_editor_meta_box_post_form_hidden_fields( $post ); ?>
</form>
- <form id="toggle-custom-fields-form" method="post" action="<?php echo esc_attr( admin_url( 'post.php' ) ); ?>">
- <?php wp_nonce_field( 'toggle-custom-fields' ); ?>
+ <form id="toggle-custom-fields-form" method="post" action="<?php echo esc_url( admin_url( 'post.php' ) ); ?>">
+ <?php wp_nonce_field( 'toggle-custom-fields', 'toggle-custom-fields-nonce' ); ?>
<input type="hidden" name="action" value="toggle-custom-fields" />
</form>
<?php foreach ( $locations as $location ) : ?>