wp core update 6.6

This commit is contained in:
Tony Volpe
2024-07-17 03:05:30 +00:00
parent 8f93917880
commit 4950d23a30
912 changed files with 103325 additions and 124480 deletions

View File

@@ -328,6 +328,7 @@ function create_initial_post_types() {
'map_meta_cap' => true,
'supports' => array(
'title',
'excerpt',
'editor',
'revisions',
'custom-fields',
@@ -365,6 +366,7 @@ function create_initial_post_types() {
'filter_items_list' => __( 'Filter templates list' ),
'items_list_navigation' => __( 'Templates list navigation' ),
'items_list' => __( 'Templates list' ),
'item_updated' => __( 'Template updated.' ),
),
'description' => __( 'Templates to include in your theme.' ),
'public' => false,
@@ -429,6 +431,7 @@ function create_initial_post_types() {
'filter_items_list' => __( 'Filter template parts list' ),
'items_list_navigation' => __( 'Template parts list navigation' ),
'items_list' => __( 'Template parts list' ),
'item_updated' => __( 'Template part updated.' ),
),
'description' => __( 'Template parts to include in your templates.' ),
'public' => false,
@@ -473,15 +476,19 @@ function create_initial_post_types() {
register_post_type(
'wp_global_styles',
array(
'label' => _x( 'Global Styles', 'post type general name' ),
'description' => __( 'Global styles to include in themes.' ),
'public' => false,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'_edit_link' => '/site-editor.php?canvas=edit', /* internal use only. don't use this when registering your own post type. */
'show_ui' => false,
'show_in_rest' => false,
'rewrite' => false,
'capabilities' => array(
'label' => _x( 'Global Styles', 'post type general name' ),
'description' => __( 'Global styles to include in themes.' ),
'public' => false,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'_edit_link' => '/site-editor.php?canvas=edit', /* internal use only. don't use this when registering your own post type. */
'show_ui' => false,
'show_in_rest' => true,
'rewrite' => false,
'rest_base' => 'global-styles',
'rest_controller_class' => 'WP_REST_Global_Styles_Controller',
'revisions_rest_controller_class' => 'WP_REST_Global_Styles_Revisions_Controller',
'late_route_registration' => true,
'capabilities' => array(
'read' => 'edit_theme_options',
'create_posts' => 'edit_theme_options',
'edit_posts' => 'edit_theme_options',
@@ -490,14 +497,16 @@ function create_initial_post_types() {
'edit_others_posts' => 'edit_theme_options',
'delete_others_posts' => 'edit_theme_options',
),
'map_meta_cap' => true,
'supports' => array(
'map_meta_cap' => true,
'supports' => array(
'title',
'editor',
'revisions',
),
)
);
// Disable autosave endpoints for global styles.
remove_post_type_support( 'wp_global_styles', 'autosave' );
$navigation_post_edit_link = 'site-editor.php?' . build_query(
array(
@@ -567,14 +576,14 @@ function create_initial_post_types() {
register_post_type(
'wp_font_family',
array(
'labels' => array(
'labels' => array(
'name' => __( 'Font Families' ),
'singular_name' => __( 'Font Family' ),
),
'public' => false,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'hierarchical' => false,
'capabilities' => array(
'public' => false,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'hierarchical' => false,
'capabilities' => array(
'read' => 'edit_theme_options',
'read_private_posts' => 'edit_theme_options',
'create_posts' => 'edit_theme_options',
@@ -586,28 +595,27 @@ function create_initial_post_types() {
'delete_others_posts' => 'edit_theme_options',
'delete_published_posts' => 'edit_theme_options',
),
'map_meta_cap' => true,
'query_var' => false,
'rewrite' => false,
'show_in_rest' => true,
'rest_base' => 'font-families',
'rest_controller_class' => 'WP_REST_Font_Families_Controller',
// Disable autosave endpoints for font families.
'autosave_rest_controller_class' => 'stdClass',
'map_meta_cap' => true,
'query_var' => false,
'rewrite' => false,
'show_in_rest' => true,
'rest_base' => 'font-families',
'rest_controller_class' => 'WP_REST_Font_Families_Controller',
'supports' => array( 'title' ),
)
);
register_post_type(
'wp_font_face',
array(
'labels' => array(
'labels' => array(
'name' => __( 'Font Faces' ),
'singular_name' => __( 'Font Face' ),
),
'public' => false,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'hierarchical' => false,
'capabilities' => array(
'public' => false,
'_builtin' => true, /* internal use only. don't use this when registering your own post type. */
'hierarchical' => false,
'capabilities' => array(
'read' => 'edit_theme_options',
'read_private_posts' => 'edit_theme_options',
'create_posts' => 'edit_theme_options',
@@ -619,14 +627,13 @@ function create_initial_post_types() {
'delete_others_posts' => 'edit_theme_options',
'delete_published_posts' => 'edit_theme_options',
),
'map_meta_cap' => true,
'query_var' => false,
'rewrite' => false,
'show_in_rest' => true,
'rest_base' => 'font-families/(?P<font_family_id>[\d]+)/font-faces',
'rest_controller_class' => 'WP_REST_Font_Faces_Controller',
// Disable autosave endpoints for font faces.
'autosave_rest_controller_class' => 'stdClass',
'map_meta_cap' => true,
'query_var' => false,
'rewrite' => false,
'show_in_rest' => true,
'rest_base' => 'font-families/(?P<font_family_id>[\d]+)/font-faces',
'rest_controller_class' => 'WP_REST_Font_Faces_Controller',
'supports' => array( 'title' ),
)
);
@@ -1217,7 +1224,10 @@ function get_post_mime_type( $post = null ) {
* @return string|false Post status on success, false on failure.
*/
function get_post_status( $post = null ) {
$post = get_post( $post );
// Normalize the post object if necessary, skip normalization if called from get_sample_permalink().
if ( ! $post instanceof WP_Post || ! isset( $post->filter ) || 'sample' !== $post->filter ) {
$post = get_post( $post );
}
if ( ! is_object( $post ) ) {
return false;
@@ -1713,8 +1723,10 @@ function get_post_types( $args = array(), $output = 'names', $operator = 'and' )
* 'editor', 'comments', 'revisions', 'trackbacks', 'author', 'excerpt',
* 'page-attributes', 'thumbnail', 'custom-fields', and 'post-formats'.
* Additionally, the 'revisions' feature dictates whether the post type
* will store revisions, and the 'comments' feature dictates whether the
* comments count will show on the edit screen. A feature can also be
* will store revisions, the 'autosave' feature dictates whether the post type
* will be autosaved, and the 'comments' feature dictates whether the
* comments count will show on the edit screen. For backward compatibility reasons,
* adding 'editor' support implies 'autosave' support too. A feature can also be
* specified as an array of arguments to provide additional information
* about supporting that feature.
* Example: `array( 'my_feature', array( 'field' => 'value' ) )`.
@@ -2071,6 +2083,7 @@ function _post_type_meta_capabilities( $capabilities = null ) {
* @since 6.3.0 Added the `item_trashed` label.
* @since 6.4.0 Changed default values for the `add_new` label to include the type of content.
* This matches `add_new_item` and provides more context for better accessibility.
* @since 6.6.0 Added the `template_name` label.
*
* @access private
*
@@ -2084,6 +2097,11 @@ function get_post_type_labels( $post_type_object ) {
$labels = _get_custom_object_labels( $post_type_object, $nohier_vs_hier_defaults );
if ( ! isset( $post_type_object->labels->template_name ) && isset( $post_type_object->labels->singular_name ) ) {
/* translators: %s: Post type name. */
$labels->template_name = sprintf( __( 'Single item: %s' ), $post_type_object->labels->singular_name );
}
$post_type = $post_type_object->name;
$default_labels = clone $labels;
@@ -2192,7 +2210,8 @@ function _add_post_type_submenus() {
* 'thumbnail', 'custom-fields', and 'post-formats'.
*
* Additionally, the 'revisions' feature dictates whether the post type will
* store revisions, and the 'comments' feature dictates whether the comments
* store revisions, the 'autosave' feature dictates whether the post type
* will be autosaved, and the 'comments' feature dictates whether the comments
* count will show on the edit screen.
*
* A third, optional parameter can also be passed along with a feature to provide
@@ -3403,7 +3422,7 @@ function wp_post_mime_type_where( $post_mime_types, $table_alias = '' ) {
$post_mime_types = array_map( 'trim', explode( ',', $post_mime_types ) );
}
$wheres = array();
$where_clauses = array();
foreach ( (array) $post_mime_types as $mime_type ) {
$mime_type = preg_replace( '/\s/', '', $mime_type );
@@ -3431,14 +3450,14 @@ function wp_post_mime_type_where( $post_mime_types, $table_alias = '' ) {
}
if ( str_contains( $mime_pattern, '%' ) ) {
$wheres[] = empty( $table_alias ) ? "post_mime_type LIKE '$mime_pattern'" : "$table_alias.post_mime_type LIKE '$mime_pattern'";
$where_clauses[] = empty( $table_alias ) ? "post_mime_type LIKE '$mime_pattern'" : "$table_alias.post_mime_type LIKE '$mime_pattern'";
} else {
$wheres[] = empty( $table_alias ) ? "post_mime_type = '$mime_pattern'" : "$table_alias.post_mime_type = '$mime_pattern'";
$where_clauses[] = empty( $table_alias ) ? "post_mime_type = '$mime_pattern'" : "$table_alias.post_mime_type = '$mime_pattern'";
}
}
if ( ! empty( $wheres ) ) {
$where = ' AND (' . implode( ' OR ', $wheres ) . ') ';
if ( ! empty( $where_clauses ) ) {
$where = ' AND (' . implode( ' OR ', $where_clauses ) . ') ';
}
return $where;
@@ -3460,15 +3479,15 @@ function wp_post_mime_type_where( $post_mime_types, $table_alias = '' ) {
* @see wp_delete_attachment()
* @see wp_trash_post()
*
* @param int $postid Optional. Post ID. Default 0.
* @param int $post_id Optional. Post ID. Default 0.
* @param bool $force_delete Optional. Whether to bypass Trash and force deletion.
* Default false.
* @return WP_Post|false|null Post data on success, false or null on failure.
*/
function wp_delete_post( $postid = 0, $force_delete = false ) {
function wp_delete_post( $post_id = 0, $force_delete = false ) {
global $wpdb;
$post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = %d", $postid ) );
$post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = %d", $post_id ) );
if ( ! $post ) {
return $post;
@@ -3476,12 +3495,15 @@ function wp_delete_post( $postid = 0, $force_delete = false ) {
$post = get_post( $post );
if ( ! $force_delete && ( 'post' === $post->post_type || 'page' === $post->post_type ) && 'trash' !== get_post_status( $postid ) && EMPTY_TRASH_DAYS ) {
return wp_trash_post( $postid );
if ( ! $force_delete
&& ( 'post' === $post->post_type || 'page' === $post->post_type )
&& 'trash' !== get_post_status( $post_id ) && EMPTY_TRASH_DAYS
) {
return wp_trash_post( $post_id );
}
if ( 'attachment' === $post->post_type ) {
return wp_delete_attachment( $postid, $force_delete );
return wp_delete_attachment( $post_id, $force_delete );
}
/**
@@ -3506,30 +3528,39 @@ function wp_delete_post( $postid = 0, $force_delete = false ) {
*
* @see wp_delete_post()
*
* @param int $postid Post ID.
* @param WP_Post $post Post object.
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*/
do_action( 'before_delete_post', $postid, $post );
do_action( 'before_delete_post', $post_id, $post );
delete_post_meta( $postid, '_wp_trash_meta_status' );
delete_post_meta( $postid, '_wp_trash_meta_time' );
delete_post_meta( $post_id, '_wp_trash_meta_status' );
delete_post_meta( $post_id, '_wp_trash_meta_time' );
wp_delete_object_term_relationships( $postid, get_object_taxonomies( $post->post_type ) );
wp_delete_object_term_relationships( $post_id, get_object_taxonomies( $post->post_type ) );
$parent_data = array( 'post_parent' => $post->post_parent );
$parent_where = array( 'post_parent' => $postid );
$parent_where = array( 'post_parent' => $post_id );
if ( is_post_type_hierarchical( $post->post_type ) ) {
// Point children of this page to its parent, also clean the cache of affected children.
$children_query = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_parent = %d AND post_type = %s", $postid, $post->post_type );
$children = $wpdb->get_results( $children_query );
$children_query = $wpdb->prepare(
"SELECT * FROM $wpdb->posts WHERE post_parent = %d AND post_type = %s",
$post_id,
$post->post_type
);
$children = $wpdb->get_results( $children_query );
if ( $children ) {
$wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => $post->post_type ) );
}
}
// Do raw query. wp_get_post_revisions() is filtered.
$revision_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'revision'", $postid ) );
$revision_ids = $wpdb->get_col(
$wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'revision'", $post_id )
);
// Use wp_delete_post (via wp_delete_post_revision) again. Ensures any meta/misplaced data gets cleaned up.
foreach ( $revision_ids as $revision_id ) {
wp_delete_post_revision( $revision_id );
@@ -3540,44 +3571,76 @@ function wp_delete_post( $postid = 0, $force_delete = false ) {
wp_defer_comment_counting( true );
$comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d ORDER BY comment_ID DESC", $postid ) );
$comment_ids = $wpdb->get_col(
$wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d ORDER BY comment_ID DESC", $post_id )
);
foreach ( $comment_ids as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
wp_defer_comment_counting( false );
$post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $postid ) );
$post_meta_ids = $wpdb->get_col(
$wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $post_id )
);
foreach ( $post_meta_ids as $mid ) {
delete_metadata_by_mid( 'post', $mid );
}
/**
* Fires immediately before a post is deleted from the database.
*
* The dynamic portion of the hook name, `$post->post_type`, refers to
* the post type slug.
*
* @since 6.6.0
*
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*/
do_action( "delete_post_{$post->post_type}", $post_id, $post );
/**
* Fires immediately before a post is deleted from the database.
*
* @since 1.2.0
* @since 5.5.0 Added the `$post` parameter.
*
* @param int $postid Post ID.
* @param WP_Post $post Post object.
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*/
do_action( 'delete_post', $postid, $post );
do_action( 'delete_post', $post_id, $post );
$result = $wpdb->delete( $wpdb->posts, array( 'ID' => $postid ) );
$result = $wpdb->delete( $wpdb->posts, array( 'ID' => $post_id ) );
if ( ! $result ) {
return false;
}
/**
* Fires immediately after a post is deleted from the database.
*
* The dynamic portion of the hook name, `$post->post_type`, refers to
* the post type slug.
*
* @since 6.6.0
*
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*/
do_action( "deleted_post_{$post->post_type}", $post_id, $post );
/**
* Fires immediately after a post is deleted from the database.
*
* @since 2.2.0
* @since 5.5.0 Added the `$post` parameter.
*
* @param int $postid Post ID.
* @param WP_Post $post Post object.
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*/
do_action( 'deleted_post', $postid, $post );
do_action( 'deleted_post', $post_id, $post );
clean_post_cache( $post );
@@ -3587,7 +3650,7 @@ function wp_delete_post( $postid = 0, $force_delete = false ) {
}
}
wp_clear_scheduled_hook( 'publish_future_post', array( $postid ) );
wp_clear_scheduled_hook( 'publish_future_post', array( $post_id ) );
/**
* Fires after a post is deleted, at the conclusion of wp_delete_post().
@@ -3597,10 +3660,10 @@ function wp_delete_post( $postid = 0, $force_delete = false ) {
*
* @see wp_delete_post()
*
* @param int $postid Post ID.
* @param WP_Post $post Post object.
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*/
do_action( 'after_delete_post', $postid, $post );
do_action( 'after_delete_post', $post_id, $post );
return $post;
}
@@ -6813,6 +6876,11 @@ function wp_mime_type_icon( $mime = 0, $preferred_ext = '.png' ) {
$icon = wp_cache_get( "mime_type_icon_$mime" );
}
// Check if preferred file format variable is present and is a validly formatted file extension.
if ( ! empty( $preferred_ext ) && is_string( $preferred_ext ) && ! str_starts_with( $preferred_ext, '.' ) ) {
$preferred_ext = '.' . strtolower( $preferred_ext );
}
$post_id = 0;
if ( empty( $icon ) ) {
$post_mimes = array();
@@ -7886,10 +7954,10 @@ function _prime_post_caches( $ids, $update_term_cache = true, $update_meta_cache
/**
* Prime the cache containing the parent ID of various post objects.
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @since 6.4.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param int[] $ids ID list.
*/
function _prime_post_parent_id_caches( array $ids ) {
@@ -8026,10 +8094,11 @@ function get_available_post_mime_types( $type = 'attachment' ) {
$mime_types = apply_filters( 'pre_get_available_post_mime_types', null, $type );
if ( ! is_array( $mime_types ) ) {
$mime_types = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT post_mime_type FROM $wpdb->posts WHERE post_type = %s", $type ) );
$mime_types = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT post_mime_type FROM $wpdb->posts WHERE post_type = %s AND post_mime_type != ''", $type ) );
}
return $mime_types;
// Remove nulls from returned $mime_types.
return array_values( array_filter( $mime_types ) );
}
/**