2021-04-21 07:12:05 +02:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Block Editor API.
|
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
* @subpackage Editor
|
|
|
|
* @since 5.8.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the list of default categories for block types.
|
|
|
|
*
|
2021-06-23 21:05:57 +02:00
|
|
|
* @since 5.8.0
|
2023-06-26 10:57:25 +02:00
|
|
|
* @since 6.3.0 Reusable Blocks renamed to Patterns.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
|
|
|
* @return array[] Array of categories for block types.
|
|
|
|
*/
|
|
|
|
function get_default_block_categories() {
|
|
|
|
return 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' => 'theme',
|
|
|
|
'title' => _x( 'Theme', 'block category' ),
|
|
|
|
'icon' => null,
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'slug' => 'embed',
|
|
|
|
'title' => _x( 'Embeds', 'block category' ),
|
|
|
|
'icon' => null,
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'slug' => 'reusable',
|
2023-06-26 10:57:25 +02:00
|
|
|
'title' => _x( 'Patterns', 'block category' ),
|
2021-04-21 07:12:05 +02:00
|
|
|
'icon' => null,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns all the categories for block types that will be shown in the block editor.
|
|
|
|
*
|
|
|
|
* @since 5.0.0
|
2021-05-24 23:21:57 +02:00
|
|
|
* @since 5.8.0 It is possible to pass the block editor context as param.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
2021-05-24 23:21:57 +02:00
|
|
|
* @param WP_Post|WP_Block_Editor_Context $post_or_block_editor_context The current post object or
|
|
|
|
* the block editor context.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
|
|
|
* @return array[] Array of categories for block types.
|
|
|
|
*/
|
2021-05-24 23:21:57 +02:00
|
|
|
function get_block_categories( $post_or_block_editor_context ) {
|
|
|
|
$block_categories = get_default_block_categories();
|
|
|
|
$block_editor_context = $post_or_block_editor_context instanceof WP_Post ?
|
|
|
|
new WP_Block_Editor_Context(
|
|
|
|
array(
|
|
|
|
'post' => $post_or_block_editor_context,
|
|
|
|
)
|
|
|
|
) : $post_or_block_editor_context;
|
2021-04-21 07:12:05 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Filters the default array of categories for block types.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
2021-05-24 23:21:57 +02:00
|
|
|
* @param array[] $block_categories Array of categories for block types.
|
|
|
|
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
|
2021-04-21 07:12:05 +02:00
|
|
|
*/
|
2021-05-24 23:21:57 +02:00
|
|
|
$block_categories = apply_filters( 'block_categories_all', $block_categories, $block_editor_context );
|
2021-12-04 18:20:00 +01:00
|
|
|
|
2021-05-24 23:21:57 +02:00
|
|
|
if ( ! empty( $block_editor_context->post ) ) {
|
|
|
|
$post = $block_editor_context->post;
|
2021-04-21 07:12:05 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Filters the default array of categories for block types.
|
|
|
|
*
|
|
|
|
* @since 5.0.0
|
2021-06-25 16:40:57 +02:00
|
|
|
* @deprecated 5.8.0 Use the {@see 'block_categories_all'} filter instead.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
|
|
|
* @param array[] $block_categories Array of categories for block types.
|
|
|
|
* @param WP_Post $post Post being loaded.
|
|
|
|
*/
|
2021-04-21 11:32:06 +02:00
|
|
|
$block_categories = apply_filters_deprecated( 'block_categories', array( $block_categories, $post ), '5.8.0', 'block_categories_all' );
|
2021-04-21 07:12:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return $block_categories;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the list of allowed block types to use in the block editor.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
2021-05-24 23:21:57 +02:00
|
|
|
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
2022-04-28 11:46:21 +02:00
|
|
|
* @return bool|string[] Array of block type slugs, or boolean to enable/disable all.
|
2021-04-21 07:12:05 +02:00
|
|
|
*/
|
2021-05-24 23:21:57 +02:00
|
|
|
function get_allowed_block_types( $block_editor_context ) {
|
2021-04-21 07:12:05 +02:00
|
|
|
$allowed_block_types = true;
|
|
|
|
|
|
|
|
/**
|
2021-06-25 16:40:57 +02:00
|
|
|
* Filters the allowed block types for all editor types.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
2022-04-28 11:46:21 +02:00
|
|
|
* @param bool|string[] $allowed_block_types Array of block type slugs, or boolean to enable/disable all.
|
2021-06-25 16:40:57 +02:00
|
|
|
* Default true (all registered block types supported).
|
2021-05-24 23:21:57 +02:00
|
|
|
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
|
2021-04-21 07:12:05 +02:00
|
|
|
*/
|
2021-05-24 23:21:57 +02:00
|
|
|
$allowed_block_types = apply_filters( 'allowed_block_types_all', $allowed_block_types, $block_editor_context );
|
2021-12-04 18:20:00 +01:00
|
|
|
|
2021-05-24 23:21:57 +02:00
|
|
|
if ( ! empty( $block_editor_context->post ) ) {
|
|
|
|
$post = $block_editor_context->post;
|
2021-04-21 07:12:05 +02:00
|
|
|
|
|
|
|
/**
|
2021-06-25 16:40:57 +02:00
|
|
|
* Filters the allowed block types for the editor.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
|
|
|
* @since 5.0.0
|
2021-06-25 16:40:57 +02:00
|
|
|
* @deprecated 5.8.0 Use the {@see 'allowed_block_types_all'} filter instead.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
2022-04-28 11:46:21 +02:00
|
|
|
* @param bool|string[] $allowed_block_types Array of block type slugs, or boolean to enable/disable all.
|
|
|
|
* Default true (all registered block types supported)
|
|
|
|
* @param WP_Post $post The post resource data.
|
2021-04-21 07:12:05 +02:00
|
|
|
*/
|
2021-04-21 11:32:06 +02:00
|
|
|
$allowed_block_types = apply_filters_deprecated( 'allowed_block_types', array( $allowed_block_types, $post ), '5.8.0', 'allowed_block_types_all' );
|
2021-04-21 07:12:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return $allowed_block_types;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the default block editor settings.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
|
|
|
* @return array The default block editor settings.
|
|
|
|
*/
|
|
|
|
function get_default_block_editor_settings() {
|
|
|
|
// Media settings.
|
2022-11-09 01:30:10 +01:00
|
|
|
|
|
|
|
// wp_max_upload_size() can be expensive, so only call it when relevant for the current user.
|
|
|
|
$max_upload_size = 0;
|
|
|
|
if ( current_user_can( 'upload_files' ) ) {
|
|
|
|
$max_upload_size = wp_max_upload_size();
|
|
|
|
if ( ! $max_upload_size ) {
|
|
|
|
$max_upload_size = 0;
|
|
|
|
}
|
2021-04-21 07:12:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/** This filter is documented in wp-admin/includes/media.php */
|
|
|
|
$image_size_names = apply_filters(
|
|
|
|
'image_size_names_choose',
|
|
|
|
array(
|
|
|
|
'thumbnail' => __( 'Thumbnail' ),
|
|
|
|
'medium' => __( 'Medium' ),
|
|
|
|
'large' => __( 'Large' ),
|
|
|
|
'full' => __( 'Full Size' ),
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
$available_image_sizes = array();
|
|
|
|
foreach ( $image_size_names as $image_size_slug => $image_size_name ) {
|
|
|
|
$available_image_sizes[] = array(
|
|
|
|
'slug' => $image_size_slug,
|
|
|
|
'name' => $image_size_name,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
$default_size = get_option( 'image_default_size', 'large' );
|
2021-04-29 12:12:05 +02:00
|
|
|
$image_default_size = in_array( $default_size, array_keys( $image_size_names ), true ) ? $default_size : 'large';
|
2021-04-21 07:12:05 +02:00
|
|
|
|
|
|
|
$image_dimensions = array();
|
|
|
|
$all_sizes = wp_get_registered_image_subsizes();
|
|
|
|
foreach ( $available_image_sizes as $size ) {
|
|
|
|
$key = $size['slug'];
|
|
|
|
if ( isset( $all_sizes[ $key ] ) ) {
|
|
|
|
$image_dimensions[ $key ] = $all_sizes[ $key ];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-08 15:29:21 +01:00
|
|
|
// These styles are used if the "no theme styles" options is triggered or on
|
|
|
|
// themes without their own editor styles.
|
|
|
|
$default_editor_styles_file = ABSPATH . WPINC . '/css/dist/block-editor/default-editor-styles.css';
|
2022-09-23 16:00:09 +02:00
|
|
|
|
|
|
|
static $default_editor_styles_file_contents = false;
|
|
|
|
if ( ! $default_editor_styles_file_contents && file_exists( $default_editor_styles_file ) ) {
|
|
|
|
$default_editor_styles_file_contents = file_get_contents( $default_editor_styles_file );
|
|
|
|
}
|
|
|
|
|
|
|
|
$default_editor_styles = array();
|
|
|
|
if ( $default_editor_styles_file_contents ) {
|
2021-11-08 15:29:21 +01:00
|
|
|
$default_editor_styles = array(
|
2022-09-23 16:00:09 +02:00
|
|
|
array( 'css' => $default_editor_styles_file_contents ),
|
2021-11-08 15:29:21 +01:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2021-04-21 07:12:05 +02:00
|
|
|
$editor_settings = array(
|
2021-12-09 16:25:01 +01:00
|
|
|
'alignWide' => get_theme_support( 'align-wide' ),
|
|
|
|
'allowedBlockTypes' => true,
|
|
|
|
'allowedMimeTypes' => get_allowed_mime_types(),
|
|
|
|
'defaultEditorStyles' => $default_editor_styles,
|
|
|
|
'blockCategories' => get_default_block_categories(),
|
|
|
|
'isRTL' => is_rtl(),
|
|
|
|
'imageDefaultSize' => $image_default_size,
|
|
|
|
'imageDimensions' => $image_dimensions,
|
|
|
|
'imageEditing' => true,
|
|
|
|
'imageSizes' => $available_image_sizes,
|
|
|
|
'maxUploadFileSize' => $max_upload_size,
|
|
|
|
// The following flag is required to enable the new Gallery block format on the mobile apps in 5.9.
|
|
|
|
'__unstableGalleryWithImageBlocks' => true,
|
2021-04-21 07:12:05 +02:00
|
|
|
);
|
|
|
|
|
2023-01-26 19:39:13 +01:00
|
|
|
$theme_settings = get_classic_theme_supports_block_editor_settings();
|
|
|
|
foreach ( $theme_settings as $key => $value ) {
|
|
|
|
$editor_settings[ $key ] = $value;
|
2021-04-21 07:12:05 +02:00
|
|
|
}
|
|
|
|
|
2021-06-15 10:52:30 +02:00
|
|
|
return $editor_settings;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the block editor settings needed to use the Legacy Widget block which
|
|
|
|
* is not registered by default.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
|
|
|
* @return array Settings to be used with get_block_editor_settings().
|
|
|
|
*/
|
|
|
|
function get_legacy_widget_block_editor_settings() {
|
|
|
|
$editor_settings = array();
|
|
|
|
|
2021-05-25 10:40:25 +02:00
|
|
|
/**
|
|
|
|
* Filters the list of widget-type IDs that should **not** be offered by the
|
|
|
|
* Legacy Widget block.
|
|
|
|
*
|
|
|
|
* Returning an empty array will make all widgets available.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
2021-07-01 23:02:57 +02:00
|
|
|
* @param string[] $widgets An array of excluded widget-type IDs.
|
2021-05-25 10:40:25 +02:00
|
|
|
*/
|
|
|
|
$editor_settings['widgetTypesToHideFromLegacyWidgetBlock'] = apply_filters(
|
|
|
|
'widget_types_to_hide_from_legacy_widget_block',
|
|
|
|
array(
|
|
|
|
'pages',
|
|
|
|
'calendar',
|
|
|
|
'archives',
|
|
|
|
'media_audio',
|
|
|
|
'media_image',
|
|
|
|
'media_gallery',
|
|
|
|
'media_video',
|
|
|
|
'search',
|
|
|
|
'text',
|
|
|
|
'categories',
|
|
|
|
'recent-posts',
|
|
|
|
'recent-comments',
|
|
|
|
'rss',
|
|
|
|
'tag_cloud',
|
|
|
|
'custom_html',
|
|
|
|
'block',
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
2021-04-21 07:12:05 +02:00
|
|
|
return $editor_settings;
|
|
|
|
}
|
|
|
|
|
2022-04-12 18:02:19 +02:00
|
|
|
/**
|
|
|
|
* Collect the block editor assets that need to be loaded into the editor's iframe.
|
|
|
|
*
|
|
|
|
* @since 6.0.0
|
|
|
|
* @access private
|
|
|
|
*
|
2023-06-27 02:23:23 +02:00
|
|
|
* @global WP_Styles $wp_styles The WP_Styles current instance.
|
|
|
|
* @global WP_Scripts $wp_scripts The WP_Scripts current instance.
|
2022-04-12 18:02:19 +02:00
|
|
|
*
|
2022-04-28 11:59:13 +02:00
|
|
|
* @return array {
|
|
|
|
* The block editor assets.
|
|
|
|
*
|
|
|
|
* @type string|false $styles String containing the HTML for styles.
|
|
|
|
* @type string|false $scripts String containing the HTML for scripts.
|
|
|
|
* }
|
2022-04-12 18:02:19 +02:00
|
|
|
*/
|
|
|
|
function _wp_get_iframed_editor_assets() {
|
2023-09-27 19:40:20 +02:00
|
|
|
global $wp_styles, $wp_scripts;
|
2022-04-12 18:02:19 +02:00
|
|
|
|
2023-06-27 02:23:23 +02:00
|
|
|
// Keep track of the styles and scripts instance to restore later.
|
|
|
|
$current_wp_styles = $wp_styles;
|
|
|
|
$current_wp_scripts = $wp_scripts;
|
|
|
|
|
|
|
|
// Create new instances to collect the assets.
|
|
|
|
$wp_styles = new WP_Styles();
|
|
|
|
$wp_scripts = new WP_Scripts();
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Register all currently registered styles and scripts. The actions that
|
|
|
|
* follow enqueue assets, but don't necessarily register them.
|
|
|
|
*/
|
|
|
|
$wp_styles->registered = $current_wp_styles->registered;
|
|
|
|
$wp_scripts->registered = $current_wp_scripts->registered;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* We generally do not need reset styles for the iframed editor.
|
|
|
|
* However, if it's a classic theme, margins will be added to every block,
|
|
|
|
* which is reset specifically for list items, so classic themes rely on
|
|
|
|
* these reset styles.
|
|
|
|
*/
|
|
|
|
$wp_styles->done =
|
|
|
|
wp_theme_has_theme_json() ? array( 'wp-reset-editor-styles' ) : array();
|
2022-04-12 18:02:19 +02:00
|
|
|
|
2023-06-27 02:23:23 +02:00
|
|
|
wp_enqueue_script( 'wp-polyfill' );
|
|
|
|
// Enqueue the `editorStyle` handles for all core block, and dependencies.
|
|
|
|
wp_enqueue_style( 'wp-edit-blocks' );
|
|
|
|
|
|
|
|
if ( current_theme_supports( 'wp-block-styles' ) ) {
|
|
|
|
wp_enqueue_style( 'wp-block-library-theme' );
|
2022-04-12 18:02:19 +02:00
|
|
|
}
|
|
|
|
|
2023-06-27 02:23:23 +02:00
|
|
|
/*
|
|
|
|
* We don't want to load EDITOR scripts in the iframe, only enqueue
|
|
|
|
* front-end assets for the content.
|
|
|
|
*/
|
|
|
|
add_filter( 'should_load_block_editor_scripts_and_styles', '__return_false' );
|
|
|
|
do_action( 'enqueue_block_assets' );
|
|
|
|
remove_filter( 'should_load_block_editor_scripts_and_styles', '__return_false' );
|
|
|
|
|
2022-04-12 18:02:19 +02:00
|
|
|
$block_registry = WP_Block_Type_Registry::get_instance();
|
|
|
|
|
2023-06-27 02:23:23 +02:00
|
|
|
/*
|
|
|
|
* Additionally, do enqueue `editorStyle` assets for all blocks, which
|
|
|
|
* contains editor-only styling for blocks (editor content).
|
|
|
|
*/
|
2022-04-12 18:02:19 +02:00
|
|
|
foreach ( $block_registry->get_all_registered() as $block_type ) {
|
2023-06-27 02:23:23 +02:00
|
|
|
if ( isset( $block_type->editor_style_handles ) && is_array( $block_type->editor_style_handles ) ) {
|
|
|
|
foreach ( $block_type->editor_style_handles as $style_handle ) {
|
|
|
|
wp_enqueue_style( $style_handle );
|
|
|
|
}
|
|
|
|
}
|
2022-04-12 18:02:19 +02:00
|
|
|
}
|
|
|
|
|
2023-09-26 14:28:22 +02:00
|
|
|
/**
|
|
|
|
* Remove the deprecated `print_emoji_styles` handler.
|
|
|
|
* It avoids breaking style generation with a deprecation message.
|
|
|
|
*/
|
|
|
|
$has_emoji_styles = has_action( 'wp_print_styles', 'print_emoji_styles' );
|
|
|
|
if ( $has_emoji_styles ) {
|
|
|
|
remove_action( 'wp_print_styles', 'print_emoji_styles' );
|
|
|
|
}
|
|
|
|
|
2022-04-12 18:02:19 +02:00
|
|
|
ob_start();
|
2023-06-27 02:23:23 +02:00
|
|
|
wp_print_styles();
|
Introduce font-face styles generator and printer.
Introducing Font Face, a server-side `@font-face` styles generator and printer.
tl;dr:
* Introduces Font Face.
* Deprecates `_wp_theme_json_webfonts_handler()`.
**Introduce Font Face**
From an array of fonts (i.e. each font-family and its font variations to be processed), it:
1. Validates each `font-face` declaration, i.e. the CSS property and value pairing. If validation fails, processing stops with no font-face styles printed.
3. Generates the `@font-face` CSS for each font-family.
4. Prints the CSS within a `<style id="wp-fonts-local">` element.
The entry point into Font Face is through a new global function called `wp_print_font_faces()`, which is automatically called:
* when the `'wp_head'` hook runs (for the front-end).
* when the `'admin_print_styles'` hook runs (for the back-end).
* when `_wp_get_iframed_editor_assets()` runs to inject the `@font-face` styles into the iframed editor.
Once called, it gets the fonts from Theme_JSON merged data layer, which includes theme defined fonts and user activated fonts (once the Font Library #59166 is introduced into Core).
For classic sites, themes and plugins can directly call `wp_print_font_faces()` and pass their fonts array to it for processing.
**Deprecates `_wp_theme_json_webfonts_handler()`.**
As Font Face is a direct replacement, the stopgap code in `_wp_theme_json_webfonts_handler()` (introduced in 6.0.0 via [53282]) is deprecated and unused in Core.
**Props note:**
There's a long multiple year history baked into Font Face, which dates back to the early versions of a web font API (see #46370 and [https://github.com/WordPress/gutenberg/issues/41479 roadmap]. The props list includes those who contributed from those early versions up to this commit.
**References:**
* #46370 original (Web)Fonts API proposal for registering and enqueuing web fonts.
* [https://github.com/WordPress/gutenberg/issues/41479 Gutenberg tracking issue] which includes the evolution from Webfonts API to Fonts API to Font Face.
* [53282] / #55567 Added the stopgap code `_wp_theme_json_webfonts_handler()` in 6.0.
* [https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face @font-face on mdn web docs]
* #59166 Font Library: Font manager for WordPress
Follow-up to [53282].
Props aristath, jonoaldersonwp, hellofromTonya, andraganescu, annezazu, antonvlasenko, arena, askdesign, azaozz, bph, bradley2083, colorful-tones, costdev, davidbaumwald, desrosj, dingo_d, djcowan, domainsupport, dryanpress, elmastudio, flixos90, francina, garrett-eclipse, gigitux, grantmkin, grapplerulrich, gziolo, ironprogrammer, jb510, jeffpaul, jeremyyip, jffng, joostdevalk, jorgefilipecosta, juanmaguitar, mamaduka, matveb, mburridge, mitogh, ndiego, ntsekouras, oandregal, ocean90, oglekler, paaljoachim, pagelab, peterwilsoncc, poena, priethor, scruffian, SergeyBiryukov, shiloey, simison, skorasaurus, soean, westonruter, wildworks, zaguiini.
Fixes #59165.
Built from https://develop.svn.wordpress.org/trunk@56500
git-svn-id: http://core.svn.wordpress.org/trunk@56012 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-08-31 23:49:20 +02:00
|
|
|
wp_print_font_faces();
|
2022-04-12 18:02:19 +02:00
|
|
|
$styles = ob_get_clean();
|
|
|
|
|
2023-09-26 14:28:22 +02:00
|
|
|
if ( $has_emoji_styles ) {
|
|
|
|
add_action( 'wp_print_styles', 'print_emoji_styles' );
|
|
|
|
}
|
|
|
|
|
2022-04-12 18:02:19 +02:00
|
|
|
ob_start();
|
2023-06-27 02:23:23 +02:00
|
|
|
wp_print_head_scripts();
|
|
|
|
wp_print_footer_scripts();
|
2022-04-12 18:02:19 +02:00
|
|
|
$scripts = ob_get_clean();
|
|
|
|
|
2023-06-27 02:23:23 +02:00
|
|
|
// Restore the original instances.
|
|
|
|
$wp_styles = $current_wp_styles;
|
|
|
|
$wp_scripts = $current_wp_scripts;
|
|
|
|
|
2022-04-12 18:02:19 +02:00
|
|
|
return array(
|
|
|
|
'styles' => $styles,
|
|
|
|
'scripts' => $scripts,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2023-06-21 06:23:23 +02:00
|
|
|
/**
|
|
|
|
* Finds the first occurrence of a specific block in an array of blocks.
|
|
|
|
*
|
|
|
|
* @since 6.3.0
|
|
|
|
*
|
|
|
|
* @param array $blocks Array of blocks.
|
|
|
|
* @param string $block_name Name of the block to find.
|
|
|
|
* @return array Found block, or empty array if none found.
|
|
|
|
*/
|
|
|
|
function wp_get_first_block( $blocks, $block_name ) {
|
|
|
|
foreach ( $blocks as $block ) {
|
|
|
|
if ( $block_name === $block['blockName'] ) {
|
|
|
|
return $block;
|
|
|
|
}
|
|
|
|
if ( ! empty( $block['innerBlocks'] ) ) {
|
|
|
|
$found_block = wp_get_first_block( $block['innerBlocks'], $block_name );
|
|
|
|
|
|
|
|
if ( ! empty( $found_block ) ) {
|
|
|
|
return $found_block;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return array();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieves Post Content block attributes from the current post template.
|
|
|
|
*
|
|
|
|
* @since 6.3.0
|
2023-09-20 03:26:19 +02:00
|
|
|
* @since 6.4.0 Return null if there is no post content block.
|
2023-06-21 06:23:23 +02:00
|
|
|
* @access private
|
|
|
|
*
|
|
|
|
* @global int $post_ID
|
|
|
|
*
|
2023-09-20 03:26:19 +02:00
|
|
|
* @return array|null Post Content block attributes array or null if Post Content block doesn't exist.
|
2023-06-21 06:23:23 +02:00
|
|
|
*/
|
|
|
|
function wp_get_post_content_block_attributes() {
|
|
|
|
global $post_ID;
|
|
|
|
|
|
|
|
$is_block_theme = wp_is_block_theme();
|
|
|
|
|
|
|
|
if ( ! $is_block_theme || ! $post_ID ) {
|
2023-09-20 03:26:19 +02:00
|
|
|
return null;
|
2023-06-21 06:23:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
$template_slug = get_page_template_slug( $post_ID );
|
|
|
|
|
|
|
|
if ( ! $template_slug ) {
|
|
|
|
$post_slug = 'singular';
|
|
|
|
$page_slug = 'singular';
|
|
|
|
$template_types = get_block_templates();
|
|
|
|
|
|
|
|
foreach ( $template_types as $template_type ) {
|
|
|
|
if ( 'page' === $template_type->slug ) {
|
|
|
|
$page_slug = 'page';
|
|
|
|
}
|
|
|
|
if ( 'single' === $template_type->slug ) {
|
|
|
|
$post_slug = 'single';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$what_post_type = get_post_type( $post_ID );
|
|
|
|
switch ( $what_post_type ) {
|
|
|
|
case 'page':
|
|
|
|
$template_slug = $page_slug;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$template_slug = $post_slug;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$current_template = get_block_templates( array( 'slug__in' => array( $template_slug ) ) );
|
|
|
|
|
|
|
|
if ( ! empty( $current_template ) ) {
|
|
|
|
$template_blocks = parse_blocks( $current_template[0]->content );
|
|
|
|
$post_content_block = wp_get_first_block( $template_blocks, 'core/post-content' );
|
|
|
|
|
2023-09-20 03:26:19 +02:00
|
|
|
if ( isset( $post_content_block['attrs'] ) ) {
|
2023-06-21 06:23:23 +02:00
|
|
|
return $post_content_block['attrs'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-09-20 03:26:19 +02:00
|
|
|
return null;
|
2023-06-21 06:23:23 +02:00
|
|
|
}
|
|
|
|
|
2021-04-21 07:12:05 +02:00
|
|
|
/**
|
2021-08-15 14:45:59 +02:00
|
|
|
* Returns the contextualized block editor settings for a selected editor context.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
2021-05-24 23:21:57 +02:00
|
|
|
* @param array $custom_settings Custom settings to use with the given editor type.
|
|
|
|
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
|
|
|
* @return array The contextualized block editor settings.
|
|
|
|
*/
|
2021-05-24 23:21:57 +02:00
|
|
|
function get_block_editor_settings( array $custom_settings, $block_editor_context ) {
|
2021-04-21 07:12:05 +02:00
|
|
|
$editor_settings = array_merge(
|
2021-05-24 12:23:56 +02:00
|
|
|
get_default_block_editor_settings(),
|
2021-04-21 07:12:05 +02:00
|
|
|
array(
|
2021-05-24 23:21:57 +02:00
|
|
|
'allowedBlockTypes' => get_allowed_block_types( $block_editor_context ),
|
|
|
|
'blockCategories' => get_block_categories( $block_editor_context ),
|
2021-04-21 07:12:05 +02:00
|
|
|
),
|
|
|
|
$custom_settings
|
|
|
|
);
|
|
|
|
|
2022-02-17 15:14:01 +01:00
|
|
|
$global_styles = array();
|
|
|
|
$presets = array(
|
2021-11-08 22:45:58 +01:00
|
|
|
array(
|
2022-01-10 02:56:02 +01:00
|
|
|
'css' => 'variables',
|
|
|
|
'__unstableType' => 'presets',
|
2022-04-18 19:12:07 +02:00
|
|
|
'isGlobalStyles' => true,
|
2021-11-08 22:45:58 +01:00
|
|
|
),
|
|
|
|
array(
|
|
|
|
'css' => 'presets',
|
|
|
|
'__unstableType' => 'presets',
|
2022-04-18 19:12:07 +02:00
|
|
|
'isGlobalStyles' => true,
|
2021-11-08 22:45:58 +01:00
|
|
|
),
|
|
|
|
);
|
|
|
|
foreach ( $presets as $preset_style ) {
|
|
|
|
$actual_css = wp_get_global_stylesheet( array( $preset_style['css'] ) );
|
|
|
|
if ( '' !== $actual_css ) {
|
2022-02-17 15:14:01 +01:00
|
|
|
$preset_style['css'] = $actual_css;
|
|
|
|
$global_styles[] = $preset_style;
|
2021-11-08 22:45:58 +01:00
|
|
|
}
|
|
|
|
}
|
2021-05-24 10:37:55 +02:00
|
|
|
|
Themes: Introduce wp_theme_has_theme_json() for public consumption.
Adds `wp_theme_has_theme_json()` for public consumption, to replace the private internal Core-only `WP_Theme_JSON_Resolver::theme_has_support()` method. This new global function checks if a theme or its parent has a `theme.json` file.
For performance, results are cached as an integer `1` or `0` in the `'theme_json'` group with `'wp_theme_has_theme_json'` key. This is a non-persistent cache. Why? To make the derived data from `theme.json` is always fresh from the potential modifications done via hooks that can use dynamic data (modify the stylesheet depending on some option, settings depending on user permissions, etc.).
Also adds a new public function `wp_clean_theme_json_cache()` to clear the cache on `'switch_theme'` and `start_previewing_theme'`.
References:
* [https://github.com/WordPress/gutenberg/pull/45168 Gutenberg PR 45168] Add `wp_theme_has_theme_json` as a public API to know whether a theme has a `theme.json`.
* [https://github.com/WordPress/gutenberg/pull/45380 Gutenberg PR 45380] Deprecate `WP_Theme_JSON_Resolver:theme_has_support()`.
* [https://github.com/WordPress/gutenberg/pull/46150 Gutenberg PR 46150] Make `theme.json` object caches non-persistent.
* [https://github.com/WordPress/gutenberg/pull/45979 Gutenberg PR 45979] Don't check if constants set by `wp_initial_constants()` are defined.
* [https://github.com/WordPress/gutenberg/pull/45950 Gutenberg PR 45950] Cleaner logic in `wp_theme_has_theme_json`.
Follow-up to [54493], [53282], [52744], [52049], [50959].
Props oandregal, afragen, alexstine, aristath, azaozz, costdev, flixos90, hellofromTonya, mamaduka, mcsf, ocean90, spacedmonkey.
Fixes #56975.
Built from https://develop.svn.wordpress.org/trunk@55086
git-svn-id: http://core.svn.wordpress.org/trunk@54619 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-01-18 12:40:10 +01:00
|
|
|
if ( wp_theme_has_theme_json() ) {
|
2021-11-08 22:45:58 +01:00
|
|
|
$block_classes = array(
|
|
|
|
'css' => 'styles',
|
|
|
|
'__unstableType' => 'theme',
|
2022-04-18 19:12:07 +02:00
|
|
|
'isGlobalStyles' => true,
|
2021-05-24 19:39:57 +02:00
|
|
|
);
|
2021-11-08 22:45:58 +01:00
|
|
|
$actual_css = wp_get_global_stylesheet( array( $block_classes['css'] ) );
|
|
|
|
if ( '' !== $actual_css ) {
|
2022-02-17 15:14:01 +01:00
|
|
|
$block_classes['css'] = $actual_css;
|
|
|
|
$global_styles[] = $block_classes;
|
2021-11-08 22:45:58 +01:00
|
|
|
}
|
Editor: Add support for custom CSS in global styles.
This changeset introduces functions `wp_get_global_styles_custom_css()` and `wp_enqueue_global_styles_custom_css()`, which allow accessing and enqueuing custom CSS added via global styles.
Custom CSS via global styles is handled separately from custom CSS via the Customizer. If a site uses both features, the custom CSS from both sources will be loaded. The global styles custom CSS is then loaded after the Customizer custom CSS, so if there are any conflicts between the rules, the global styles take precedence.
Similarly to e.g. [55185], the result is cached in a non-persistent cache, except when `WP_DEBUG` is on to avoid interrupting the theme developer's workflow.
Props glendaviesnz, oandregal, ntsekouras, mamaduka, davidbaumwald, hellofromtonya, flixos90.
Fixes #57536.
Built from https://develop.svn.wordpress.org/trunk@55192
git-svn-id: http://core.svn.wordpress.org/trunk@54725 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-02-02 19:52:17 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Add the custom CSS as a separate stylesheet so any invalid CSS
|
|
|
|
* entered by users does not break other global styles.
|
|
|
|
*/
|
2023-03-01 12:43:20 +01:00
|
|
|
$global_styles[] = array(
|
Editor: Add support for custom CSS in global styles.
This changeset introduces functions `wp_get_global_styles_custom_css()` and `wp_enqueue_global_styles_custom_css()`, which allow accessing and enqueuing custom CSS added via global styles.
Custom CSS via global styles is handled separately from custom CSS via the Customizer. If a site uses both features, the custom CSS from both sources will be loaded. The global styles custom CSS is then loaded after the Customizer custom CSS, so if there are any conflicts between the rules, the global styles take precedence.
Similarly to e.g. [55185], the result is cached in a non-persistent cache, except when `WP_DEBUG` is on to avoid interrupting the theme developer's workflow.
Props glendaviesnz, oandregal, ntsekouras, mamaduka, davidbaumwald, hellofromtonya, flixos90.
Fixes #57536.
Built from https://develop.svn.wordpress.org/trunk@55192
git-svn-id: http://core.svn.wordpress.org/trunk@54725 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-02-02 19:52:17 +01:00
|
|
|
'css' => wp_get_global_styles_custom_css(),
|
|
|
|
'__unstableType' => 'user',
|
|
|
|
'isGlobalStyles' => true,
|
|
|
|
);
|
Editor: Backport foundation for Layout block support refactor (part 1).
Backports the following changes from the Gutenberg repository:
* [WordPress/gutenberg/40875 gutenberg/40875] Layout: Use semantic classnames, centralize layout definitions, reduce duplication, and fix blockGap in theme.json
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42087 gutenberg/42087] Theme.json: Add block support feature level selectors for blocks gutenberg/42087
* [WordPress/gutenberg/43792 gutenberg/43792] Global Styles: Split root layout rules into a different function gutenberg/43792
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42665 gutenberg/42665] Layout: Reduce specificity of fallback blockGap styles gutenberg/42665
* [WordPress/gutenberg/42085 gutenberg/42085] Core CSS support for root padding and alignfull blocks gutenberg/42085
Notes:
* It doesn't entirely port over PR 40875 — the remaining PHP changes for that PR will be explored in a separate PR targeting `layout.php`.
* [54159] was reverted in [54160] due to PHPUnit test failures for tests added by the commit. Later, tests passed when applied on top of `trunk`. There were various outages today of upstream `wp-env` dependencies, which likely were the root cause of the earlier failures. For historical tracking and to make sure, recommitting [54159] but instead on top of current `trunk`. See PR 3205 for more details.
* Giving additional props for those who did a deep dive investigation into the failed tests.
Follow-up to [54160], [54159].
Props andrewserong, aaronrobertshaw, isabel_brison, bernhard-reiter, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54162
git-svn-id: http://core.svn.wordpress.org/trunk@53721 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-14 20:44:09 +02:00
|
|
|
} else {
|
|
|
|
// If there is no `theme.json` file, ensure base layout styles are still available.
|
|
|
|
$block_classes = array(
|
|
|
|
'css' => 'base-layout-styles',
|
|
|
|
'__unstableType' => 'base-layout',
|
|
|
|
'isGlobalStyles' => true,
|
|
|
|
);
|
|
|
|
$actual_css = wp_get_global_stylesheet( array( $block_classes['css'] ) );
|
|
|
|
if ( '' !== $actual_css ) {
|
|
|
|
$block_classes['css'] = $actual_css;
|
Coding Standards: Various alignment fixes from `composer format`.
Follow up to [53874], [54097], [54110], [54155], [54162], [54184].
See #39210, #55443, #56288, #56092, #56408, #56467, #55881.
Built from https://develop.svn.wordpress.org/trunk@54210
git-svn-id: http://core.svn.wordpress.org/trunk@53769 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-19 21:51:09 +02:00
|
|
|
$global_styles[] = $block_classes;
|
Editor: Backport foundation for Layout block support refactor (part 1).
Backports the following changes from the Gutenberg repository:
* [WordPress/gutenberg/40875 gutenberg/40875] Layout: Use semantic classnames, centralize layout definitions, reduce duplication, and fix blockGap in theme.json
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42087 gutenberg/42087] Theme.json: Add block support feature level selectors for blocks gutenberg/42087
* [WordPress/gutenberg/43792 gutenberg/43792] Global Styles: Split root layout rules into a different function gutenberg/43792
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42665 gutenberg/42665] Layout: Reduce specificity of fallback blockGap styles gutenberg/42665
* [WordPress/gutenberg/42085 gutenberg/42085] Core CSS support for root padding and alignfull blocks gutenberg/42085
Notes:
* It doesn't entirely port over PR 40875 — the remaining PHP changes for that PR will be explored in a separate PR targeting `layout.php`.
* [54159] was reverted in [54160] due to PHPUnit test failures for tests added by the commit. Later, tests passed when applied on top of `trunk`. There were various outages today of upstream `wp-env` dependencies, which likely were the root cause of the earlier failures. For historical tracking and to make sure, recommitting [54159] but instead on top of current `trunk`. See PR 3205 for more details.
* Giving additional props for those who did a deep dive investigation into the failed tests.
Follow-up to [54160], [54159].
Props andrewserong, aaronrobertshaw, isabel_brison, bernhard-reiter, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54162
git-svn-id: http://core.svn.wordpress.org/trunk@53721 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-14 20:44:09 +02:00
|
|
|
}
|
2021-05-24 19:39:57 +02:00
|
|
|
}
|
|
|
|
|
2022-02-17 15:14:01 +01:00
|
|
|
$editor_settings['styles'] = array_merge( $global_styles, get_block_editor_theme_styles() );
|
|
|
|
|
2021-11-08 22:45:58 +01:00
|
|
|
$editor_settings['__experimentalFeatures'] = wp_get_global_settings();
|
2021-05-24 10:37:55 +02:00
|
|
|
// These settings may need to be updated based on data coming from theme.json sources.
|
2021-06-23 02:26:58 +02:00
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['color']['palette'] ) ) {
|
|
|
|
$colors_by_origin = $editor_settings['__experimentalFeatures']['color']['palette'];
|
2021-11-30 01:24:27 +01:00
|
|
|
$editor_settings['colors'] = isset( $colors_by_origin['custom'] ) ?
|
|
|
|
$colors_by_origin['custom'] : (
|
2021-06-15 10:52:30 +02:00
|
|
|
isset( $colors_by_origin['theme'] ) ?
|
|
|
|
$colors_by_origin['theme'] :
|
2021-11-23 06:40:38 +01:00
|
|
|
$colors_by_origin['default']
|
2021-06-15 10:52:30 +02:00
|
|
|
);
|
2021-05-24 10:37:55 +02:00
|
|
|
}
|
2021-06-23 02:26:58 +02:00
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['color']['gradients'] ) ) {
|
|
|
|
$gradients_by_origin = $editor_settings['__experimentalFeatures']['color']['gradients'];
|
2021-11-30 01:24:27 +01:00
|
|
|
$editor_settings['gradients'] = isset( $gradients_by_origin['custom'] ) ?
|
|
|
|
$gradients_by_origin['custom'] : (
|
2021-06-15 10:52:30 +02:00
|
|
|
isset( $gradients_by_origin['theme'] ) ?
|
|
|
|
$gradients_by_origin['theme'] :
|
2021-11-23 06:40:38 +01:00
|
|
|
$gradients_by_origin['default']
|
2021-06-15 10:52:30 +02:00
|
|
|
);
|
|
|
|
}
|
2021-06-23 02:26:58 +02:00
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['typography']['fontSizes'] ) ) {
|
|
|
|
$font_sizes_by_origin = $editor_settings['__experimentalFeatures']['typography']['fontSizes'];
|
2021-11-30 01:24:27 +01:00
|
|
|
$editor_settings['fontSizes'] = isset( $font_sizes_by_origin['custom'] ) ?
|
|
|
|
$font_sizes_by_origin['custom'] : (
|
2021-06-15 10:52:30 +02:00
|
|
|
isset( $font_sizes_by_origin['theme'] ) ?
|
|
|
|
$font_sizes_by_origin['theme'] :
|
2021-11-23 06:40:38 +01:00
|
|
|
$font_sizes_by_origin['default']
|
2021-06-15 10:52:30 +02:00
|
|
|
);
|
2021-05-24 10:37:55 +02:00
|
|
|
}
|
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['color']['custom'] ) ) {
|
2021-05-26 16:25:59 +02:00
|
|
|
$editor_settings['disableCustomColors'] = ! $editor_settings['__experimentalFeatures']['color']['custom'];
|
2021-05-24 10:37:55 +02:00
|
|
|
unset( $editor_settings['__experimentalFeatures']['color']['custom'] );
|
|
|
|
}
|
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['color']['customGradient'] ) ) {
|
2021-05-26 16:25:59 +02:00
|
|
|
$editor_settings['disableCustomGradients'] = ! $editor_settings['__experimentalFeatures']['color']['customGradient'];
|
2021-05-24 10:37:55 +02:00
|
|
|
unset( $editor_settings['__experimentalFeatures']['color']['customGradient'] );
|
|
|
|
}
|
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['typography']['customFontSize'] ) ) {
|
2021-05-26 16:25:59 +02:00
|
|
|
$editor_settings['disableCustomFontSizes'] = ! $editor_settings['__experimentalFeatures']['typography']['customFontSize'];
|
2021-05-24 10:37:55 +02:00
|
|
|
unset( $editor_settings['__experimentalFeatures']['typography']['customFontSize'] );
|
|
|
|
}
|
2021-11-08 20:19:58 +01:00
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['typography']['lineHeight'] ) ) {
|
|
|
|
$editor_settings['enableCustomLineHeight'] = $editor_settings['__experimentalFeatures']['typography']['lineHeight'];
|
|
|
|
unset( $editor_settings['__experimentalFeatures']['typography']['lineHeight'] );
|
2021-05-24 10:37:55 +02:00
|
|
|
}
|
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['spacing']['units'] ) ) {
|
2021-06-22 19:16:58 +02:00
|
|
|
$editor_settings['enableCustomUnits'] = $editor_settings['__experimentalFeatures']['spacing']['units'];
|
2021-05-24 10:37:55 +02:00
|
|
|
unset( $editor_settings['__experimentalFeatures']['spacing']['units'] );
|
|
|
|
}
|
2021-11-08 20:19:58 +01:00
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['spacing']['padding'] ) ) {
|
|
|
|
$editor_settings['enableCustomSpacing'] = $editor_settings['__experimentalFeatures']['spacing']['padding'];
|
|
|
|
unset( $editor_settings['__experimentalFeatures']['spacing']['padding'] );
|
2021-05-24 10:37:55 +02:00
|
|
|
}
|
Editor: Backport foundation for Layout block support refactor (part 1).
Backports the following changes from the Gutenberg repository:
* [WordPress/gutenberg/40875 gutenberg/40875] Layout: Use semantic classnames, centralize layout definitions, reduce duplication, and fix blockGap in theme.json
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42087 gutenberg/42087] Theme.json: Add block support feature level selectors for blocks gutenberg/42087
* [WordPress/gutenberg/43792 gutenberg/43792] Global Styles: Split root layout rules into a different function gutenberg/43792
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42665 gutenberg/42665] Layout: Reduce specificity of fallback blockGap styles gutenberg/42665
* [WordPress/gutenberg/42085 gutenberg/42085] Core CSS support for root padding and alignfull blocks gutenberg/42085
Notes:
* It doesn't entirely port over PR 40875 — the remaining PHP changes for that PR will be explored in a separate PR targeting `layout.php`.
* [54159] was reverted in [54160] due to PHPUnit test failures for tests added by the commit. Later, tests passed when applied on top of `trunk`. There were various outages today of upstream `wp-env` dependencies, which likely were the root cause of the earlier failures. For historical tracking and to make sure, recommitting [54159] but instead on top of current `trunk`. See PR 3205 for more details.
* Giving additional props for those who did a deep dive investigation into the failed tests.
Follow-up to [54160], [54159].
Props andrewserong, aaronrobertshaw, isabel_brison, bernhard-reiter, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54162
git-svn-id: http://core.svn.wordpress.org/trunk@53721 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-14 20:44:09 +02:00
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['spacing']['customSpacingSize'] ) ) {
|
2022-09-21 13:43:13 +02:00
|
|
|
$editor_settings['disableCustomSpacingSizes'] = ! $editor_settings['__experimentalFeatures']['spacing']['customSpacingSize'];
|
Editor: Backport foundation for Layout block support refactor (part 1).
Backports the following changes from the Gutenberg repository:
* [WordPress/gutenberg/40875 gutenberg/40875] Layout: Use semantic classnames, centralize layout definitions, reduce duplication, and fix blockGap in theme.json
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42087 gutenberg/42087] Theme.json: Add block support feature level selectors for blocks gutenberg/42087
* [WordPress/gutenberg/43792 gutenberg/43792] Global Styles: Split root layout rules into a different function gutenberg/43792
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42665 gutenberg/42665] Layout: Reduce specificity of fallback blockGap styles gutenberg/42665
* [WordPress/gutenberg/42085 gutenberg/42085] Core CSS support for root padding and alignfull blocks gutenberg/42085
Notes:
* It doesn't entirely port over PR 40875 — the remaining PHP changes for that PR will be explored in a separate PR targeting `layout.php`.
* [54159] was reverted in [54160] due to PHPUnit test failures for tests added by the commit. Later, tests passed when applied on top of `trunk`. There were various outages today of upstream `wp-env` dependencies, which likely were the root cause of the earlier failures. For historical tracking and to make sure, recommitting [54159] but instead on top of current `trunk`. See PR 3205 for more details.
* Giving additional props for those who did a deep dive investigation into the failed tests.
Follow-up to [54160], [54159].
Props andrewserong, aaronrobertshaw, isabel_brison, bernhard-reiter, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54162
git-svn-id: http://core.svn.wordpress.org/trunk@53721 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-14 20:44:09 +02:00
|
|
|
unset( $editor_settings['__experimentalFeatures']['spacing']['customSpacingSize'] );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( isset( $editor_settings['__experimentalFeatures']['spacing']['spacingSizes'] ) ) {
|
Coding Standards: Various alignment fixes from `composer format`.
Follow up to [53874], [54097], [54110], [54155], [54162], [54184].
See #39210, #55443, #56288, #56092, #56408, #56467, #55881.
Built from https://develop.svn.wordpress.org/trunk@54210
git-svn-id: http://core.svn.wordpress.org/trunk@53769 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-19 21:51:09 +02:00
|
|
|
$spacing_sizes_by_origin = $editor_settings['__experimentalFeatures']['spacing']['spacingSizes'];
|
Editor: Backport foundation for Layout block support refactor (part 1).
Backports the following changes from the Gutenberg repository:
* [WordPress/gutenberg/40875 gutenberg/40875] Layout: Use semantic classnames, centralize layout definitions, reduce duplication, and fix blockGap in theme.json
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42087 gutenberg/42087] Theme.json: Add block support feature level selectors for blocks gutenberg/42087
* [WordPress/gutenberg/43792 gutenberg/43792] Global Styles: Split root layout rules into a different function gutenberg/43792
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42665 gutenberg/42665] Layout: Reduce specificity of fallback blockGap styles gutenberg/42665
* [WordPress/gutenberg/42085 gutenberg/42085] Core CSS support for root padding and alignfull blocks gutenberg/42085
Notes:
* It doesn't entirely port over PR 40875 — the remaining PHP changes for that PR will be explored in a separate PR targeting `layout.php`.
* [54159] was reverted in [54160] due to PHPUnit test failures for tests added by the commit. Later, tests passed when applied on top of `trunk`. There were various outages today of upstream `wp-env` dependencies, which likely were the root cause of the earlier failures. For historical tracking and to make sure, recommitting [54159] but instead on top of current `trunk`. See PR 3205 for more details.
* Giving additional props for those who did a deep dive investigation into the failed tests.
Follow-up to [54160], [54159].
Props andrewserong, aaronrobertshaw, isabel_brison, bernhard-reiter, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54162
git-svn-id: http://core.svn.wordpress.org/trunk@53721 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-14 20:44:09 +02:00
|
|
|
$editor_settings['spacingSizes'] = isset( $spacing_sizes_by_origin['custom'] ) ?
|
|
|
|
$spacing_sizes_by_origin['custom'] : (
|
|
|
|
isset( $spacing_sizes_by_origin['theme'] ) ?
|
|
|
|
$spacing_sizes_by_origin['theme'] :
|
|
|
|
$spacing_sizes_by_origin['default']
|
|
|
|
);
|
|
|
|
}
|
2021-05-24 10:37:55 +02:00
|
|
|
|
2022-04-12 18:02:19 +02:00
|
|
|
$editor_settings['__unstableResolvedAssets'] = _wp_get_iframed_editor_assets();
|
2023-01-26 21:01:12 +01:00
|
|
|
$editor_settings['__unstableIsBlockBasedTheme'] = wp_is_block_theme();
|
2022-04-12 18:02:19 +02:00
|
|
|
$editor_settings['localAutosaveInterval'] = 15;
|
Editor: Backport foundation for Layout block support refactor (part 1).
Backports the following changes from the Gutenberg repository:
* [WordPress/gutenberg/40875 gutenberg/40875] Layout: Use semantic classnames, centralize layout definitions, reduce duplication, and fix blockGap in theme.json
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42087 gutenberg/42087] Theme.json: Add block support feature level selectors for blocks gutenberg/42087
* [WordPress/gutenberg/43792 gutenberg/43792] Global Styles: Split root layout rules into a different function gutenberg/43792
* [WordPress/gutenberg/42544 gutenberg/42544] Layout: Add a disable-layout-styles theme supports flag to opt out of all layout styles gutenberg/42544
* [WordPress/gutenberg/42665 gutenberg/42665] Layout: Reduce specificity of fallback blockGap styles gutenberg/42665
* [WordPress/gutenberg/42085 gutenberg/42085] Core CSS support for root padding and alignfull blocks gutenberg/42085
Notes:
* It doesn't entirely port over PR 40875 — the remaining PHP changes for that PR will be explored in a separate PR targeting `layout.php`.
* [54159] was reverted in [54160] due to PHPUnit test failures for tests added by the commit. Later, tests passed when applied on top of `trunk`. There were various outages today of upstream `wp-env` dependencies, which likely were the root cause of the earlier failures. For historical tracking and to make sure, recommitting [54159] but instead on top of current `trunk`. See PR 3205 for more details.
* Giving additional props for those who did a deep dive investigation into the failed tests.
Follow-up to [54160], [54159].
Props andrewserong, aaronrobertshaw, isabel_brison, bernhard-reiter, hellofromTonya.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54162
git-svn-id: http://core.svn.wordpress.org/trunk@53721 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-14 20:44:09 +02:00
|
|
|
$editor_settings['disableLayoutStyles'] = current_theme_supports( 'disable-layout-styles' );
|
2022-04-11 17:22:09 +02:00
|
|
|
$editor_settings['__experimentalDiscussionSettings'] = array(
|
2022-04-25 18:16:10 +02:00
|
|
|
'commentOrder' => get_option( 'comment_order' ),
|
|
|
|
'commentsPerPage' => get_option( 'comments_per_page' ),
|
|
|
|
'defaultCommentsPage' => get_option( 'default_comments_page' ),
|
|
|
|
'pageComments' => get_option( 'page_comments' ),
|
|
|
|
'threadComments' => get_option( 'thread_comments' ),
|
|
|
|
'threadCommentsDepth' => get_option( 'thread_comments_depth' ),
|
|
|
|
'defaultCommentStatus' => get_option( 'default_comment_status' ),
|
|
|
|
'avatarURL' => get_avatar_url(
|
2022-04-11 17:22:09 +02:00
|
|
|
'',
|
|
|
|
array(
|
|
|
|
'size' => 96,
|
|
|
|
'force_default' => true,
|
|
|
|
'default' => get_option( 'avatar_default' ),
|
|
|
|
)
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2023-06-21 06:23:23 +02:00
|
|
|
$post_content_block_attributes = wp_get_post_content_block_attributes();
|
|
|
|
|
2023-09-20 03:26:19 +02:00
|
|
|
if ( isset( $post_content_block_attributes ) ) {
|
2023-06-21 06:23:23 +02:00
|
|
|
$editor_settings['postContentAttributes'] = $post_content_block_attributes;
|
|
|
|
}
|
|
|
|
|
2021-04-21 11:32:06 +02:00
|
|
|
/**
|
|
|
|
* Filters the settings to pass to the block editor for all editor type.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
2021-05-24 23:21:57 +02:00
|
|
|
* @param array $editor_settings Default editor settings.
|
|
|
|
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
|
2021-04-21 11:32:06 +02:00
|
|
|
*/
|
2021-05-24 23:21:57 +02:00
|
|
|
$editor_settings = apply_filters( 'block_editor_settings_all', $editor_settings, $block_editor_context );
|
2021-12-04 18:20:00 +01:00
|
|
|
|
2021-05-24 23:21:57 +02:00
|
|
|
if ( ! empty( $block_editor_context->post ) ) {
|
|
|
|
$post = $block_editor_context->post;
|
2021-04-21 07:12:05 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Filters the settings to pass to the block editor.
|
|
|
|
*
|
|
|
|
* @since 5.0.0
|
2021-06-25 16:40:57 +02:00
|
|
|
* @deprecated 5.8.0 Use the {@see 'block_editor_settings_all'} filter instead.
|
2021-04-21 07:12:05 +02:00
|
|
|
*
|
|
|
|
* @param array $editor_settings Default editor settings.
|
|
|
|
* @param WP_Post $post Post being edited.
|
|
|
|
*/
|
2021-04-21 11:32:06 +02:00
|
|
|
$editor_settings = apply_filters_deprecated( 'block_editor_settings', array( $editor_settings, $post ), '5.8.0', 'block_editor_settings_all' );
|
2021-04-21 07:12:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return $editor_settings;
|
|
|
|
}
|
2021-05-24 09:32:55 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Preloads common data used with the block editor by specifying an array of
|
|
|
|
* REST API paths that will be preloaded for a given block editor context.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
2022-02-15 18:30:02 +01:00
|
|
|
* @global WP_Post $post Global post object.
|
|
|
|
* @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts.
|
|
|
|
* @global WP_Styles $wp_styles The WP_Styles object for printing styles.
|
2021-05-24 09:32:55 +02:00
|
|
|
*
|
2022-11-09 10:51:14 +01:00
|
|
|
* @param (string|string[])[] $preload_paths List of paths to preload.
|
2021-05-24 09:32:55 +02:00
|
|
|
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
|
|
|
|
*/
|
|
|
|
function block_editor_rest_api_preload( array $preload_paths, $block_editor_context ) {
|
2022-02-15 18:30:02 +01:00
|
|
|
global $post, $wp_scripts, $wp_styles;
|
2021-05-24 09:32:55 +02:00
|
|
|
|
|
|
|
/**
|
2021-06-25 16:40:57 +02:00
|
|
|
* Filters the array of REST API paths that will be used to preloaded common data for the block editor.
|
2021-05-24 09:32:55 +02:00
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
2022-11-09 10:51:14 +01:00
|
|
|
* @param (string|string[])[] $preload_paths Array of paths to preload.
|
2021-11-09 14:00:00 +01:00
|
|
|
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
|
2021-05-24 09:32:55 +02:00
|
|
|
*/
|
|
|
|
$preload_paths = apply_filters( 'block_editor_rest_api_preload_paths', $preload_paths, $block_editor_context );
|
2021-12-04 18:20:00 +01:00
|
|
|
|
2021-05-24 09:32:55 +02:00
|
|
|
if ( ! empty( $block_editor_context->post ) ) {
|
|
|
|
$selected_post = $block_editor_context->post;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Filters the array of paths that will be preloaded.
|
|
|
|
*
|
2021-06-25 16:40:57 +02:00
|
|
|
* Preload common data by specifying an array of REST API paths that will be preloaded.
|
|
|
|
*
|
2021-05-24 09:32:55 +02:00
|
|
|
* @since 5.0.0
|
2021-06-25 16:40:57 +02:00
|
|
|
* @deprecated 5.8.0 Use the {@see 'block_editor_rest_api_preload_paths'} filter instead.
|
2021-05-24 09:32:55 +02:00
|
|
|
*
|
2022-11-09 10:51:14 +01:00
|
|
|
* @param (string|string[])[] $preload_paths Array of paths to preload.
|
|
|
|
* @param WP_Post $selected_post Post being edited.
|
2021-05-24 09:32:55 +02:00
|
|
|
*/
|
|
|
|
$preload_paths = apply_filters_deprecated( 'block_editor_preload_paths', array( $preload_paths, $selected_post ), '5.8.0', 'block_editor_rest_api_preload_paths' );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( empty( $preload_paths ) ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2022-02-15 18:30:02 +01:00
|
|
|
* Ensure the global $post, $wp_scripts, and $wp_styles remain the same after
|
|
|
|
* API data is preloaded.
|
2021-05-24 09:32:55 +02:00
|
|
|
* Because API preloading can call the_content and other filters, plugins
|
2022-02-15 18:30:02 +01:00
|
|
|
* can unexpectedly modify the global $post or enqueue assets which are not
|
|
|
|
* intended for the block editor.
|
2021-05-24 09:32:55 +02:00
|
|
|
*/
|
|
|
|
$backup_global_post = ! empty( $post ) ? clone $post : $post;
|
2022-02-15 18:30:02 +01:00
|
|
|
$backup_wp_scripts = ! empty( $wp_scripts ) ? clone $wp_scripts : $wp_scripts;
|
|
|
|
$backup_wp_styles = ! empty( $wp_styles ) ? clone $wp_styles : $wp_styles;
|
2021-05-24 09:32:55 +02:00
|
|
|
|
2021-12-03 16:30:08 +01:00
|
|
|
foreach ( $preload_paths as &$path ) {
|
|
|
|
if ( is_string( $path ) && ! str_starts_with( $path, '/' ) ) {
|
|
|
|
$path = '/' . $path;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( is_array( $path ) && is_string( $path[0] ) && ! str_starts_with( $path[0], '/' ) ) {
|
2022-02-15 18:30:02 +01:00
|
|
|
$path[0] = '/' . $path[0];
|
2021-12-03 16:30:08 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-12-04 18:20:00 +01:00
|
|
|
unset( $path );
|
|
|
|
|
2021-05-24 09:32:55 +02:00
|
|
|
$preload_data = array_reduce(
|
|
|
|
$preload_paths,
|
|
|
|
'rest_preload_api_request',
|
|
|
|
array()
|
|
|
|
);
|
|
|
|
|
2022-02-15 18:30:02 +01:00
|
|
|
// Restore the global $post, $wp_scripts, and $wp_styles as they were before API preloading.
|
|
|
|
$post = $backup_global_post;
|
|
|
|
$wp_scripts = $backup_wp_scripts;
|
|
|
|
$wp_styles = $backup_wp_styles;
|
2021-05-24 09:32:55 +02:00
|
|
|
|
|
|
|
wp_add_inline_script(
|
|
|
|
'wp-api-fetch',
|
|
|
|
sprintf(
|
|
|
|
'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );',
|
|
|
|
wp_json_encode( $preload_data )
|
|
|
|
),
|
|
|
|
'after'
|
|
|
|
);
|
|
|
|
}
|
2021-06-22 15:33:58 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates an array of theme styles to load into the block editor.
|
|
|
|
*
|
|
|
|
* @since 5.8.0
|
|
|
|
*
|
|
|
|
* @global array $editor_styles
|
|
|
|
*
|
2021-11-08 15:29:21 +01:00
|
|
|
* @return array An array of theme styles for the block editor.
|
2021-06-22 15:33:58 +02:00
|
|
|
*/
|
|
|
|
function get_block_editor_theme_styles() {
|
|
|
|
global $editor_styles;
|
|
|
|
|
2021-11-08 15:29:21 +01:00
|
|
|
$styles = array();
|
2021-06-25 17:32:58 +02:00
|
|
|
|
2021-06-22 15:33:58 +02:00
|
|
|
if ( $editor_styles && current_theme_supports( 'editor-styles' ) ) {
|
|
|
|
foreach ( $editor_styles as $style ) {
|
|
|
|
if ( preg_match( '~^(https?:)?//~', $style ) ) {
|
|
|
|
$response = wp_remote_get( $style );
|
|
|
|
if ( ! is_wp_error( $response ) ) {
|
|
|
|
$styles[] = array(
|
|
|
|
'css' => wp_remote_retrieve_body( $response ),
|
|
|
|
'__unstableType' => 'theme',
|
2022-04-18 19:12:07 +02:00
|
|
|
'isGlobalStyles' => false,
|
2021-06-22 15:33:58 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$file = get_theme_file_path( $style );
|
|
|
|
if ( is_file( $file ) ) {
|
|
|
|
$styles[] = array(
|
|
|
|
'css' => file_get_contents( $file ),
|
|
|
|
'baseURL' => get_theme_file_uri( $style ),
|
|
|
|
'__unstableType' => 'theme',
|
2022-04-18 19:12:07 +02:00
|
|
|
'isGlobalStyles' => false,
|
2021-06-22 15:33:58 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $styles;
|
|
|
|
}
|
2023-01-26 19:39:13 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the classic theme supports settings for block editor.
|
|
|
|
*
|
|
|
|
* @since 6.2.0
|
|
|
|
*
|
|
|
|
* @return array The classic theme supports settings.
|
|
|
|
*/
|
|
|
|
function get_classic_theme_supports_block_editor_settings() {
|
|
|
|
$theme_settings = array(
|
|
|
|
'disableCustomColors' => get_theme_support( 'disable-custom-colors' ),
|
|
|
|
'disableCustomFontSizes' => get_theme_support( 'disable-custom-font-sizes' ),
|
|
|
|
'disableCustomGradients' => get_theme_support( 'disable-custom-gradients' ),
|
|
|
|
'disableLayoutStyles' => get_theme_support( 'disable-layout-styles' ),
|
|
|
|
'enableCustomLineHeight' => get_theme_support( 'custom-line-height' ),
|
|
|
|
'enableCustomSpacing' => get_theme_support( 'custom-spacing' ),
|
|
|
|
'enableCustomUnits' => get_theme_support( 'custom-units' ),
|
|
|
|
);
|
|
|
|
|
|
|
|
// Theme settings.
|
|
|
|
$color_palette = current( (array) get_theme_support( 'editor-color-palette' ) );
|
|
|
|
if ( false !== $color_palette ) {
|
|
|
|
$theme_settings['colors'] = $color_palette;
|
|
|
|
}
|
|
|
|
|
|
|
|
$font_sizes = current( (array) get_theme_support( 'editor-font-sizes' ) );
|
|
|
|
if ( false !== $font_sizes ) {
|
|
|
|
$theme_settings['fontSizes'] = $font_sizes;
|
|
|
|
}
|
|
|
|
|
|
|
|
$gradient_presets = current( (array) get_theme_support( 'editor-gradient-presets' ) );
|
|
|
|
if ( false !== $gradient_presets ) {
|
|
|
|
$theme_settings['gradients'] = $gradient_presets;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $theme_settings;
|
|
|
|
}
|