2021-11-09 03:17:17 +01:00
< ? php
/**
* Site Editor administration screen .
*
* @ package WordPress
* @ subpackage Administration
*/
2022-07-27 14:27:16 +02:00
global $editor_styles ;
2021-11-09 03:17:17 +01:00
/** WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php' ;
if ( ! current_user_can ( 'edit_theme_options' ) ) {
wp_die (
'<h1>' . __ ( 'You need a higher level of permission.' ) . '</h1>' .
'<p>' . __ ( 'Sorry, you are not allowed to edit theme options on this site.' ) . '</p>' ,
403
);
}
2023-09-06 11:33:21 +02:00
$is_template_part = isset ( $_GET [ 'postType' ] ) && 'wp_template_part' === sanitize_key ( $_GET [ 'postType' ] );
$is_template_part_path = isset ( $_GET [ 'path' ] ) && 'wp_template_partall' === sanitize_key ( $_GET [ 'path' ] );
2023-07-25 16:33:23 +02:00
$is_template_part_editor = $is_template_part || $is_template_part_path ;
2024-02-06 20:42:13 +01:00
$is_patterns = isset ( $_GET [ 'postType' ] ) && 'wp_block' === sanitize_key ( $_GET [ 'postType' ] );
$is_patterns_path = isset ( $_GET [ 'path' ] ) && 'patterns' === sanitize_key ( $_GET [ 'path' ] );
$is_patterns_editor = $is_patterns || $is_patterns_path ;
2023-07-25 16:33:23 +02:00
2024-02-06 20:42:13 +01:00
if ( ! wp_is_block_theme () ) {
if ( ! current_theme_supports ( 'block-template-parts' ) && $is_template_part_editor ) {
wp_die ( __ ( 'The theme you are currently using is not compatible with the Site Editor.' ) );
} elseif ( ! $is_patterns_editor && ! $is_template_part_editor ) {
wp_die ( __ ( 'The theme you are currently using is not compatible with the Site Editor.' ) );
}
2022-09-15 14:20:09 +02:00
}
2021-12-14 02:57:26 +01:00
// Used in the HTML title tag.
2023-02-07 19:52:18 +01:00
$title = _x ( 'Editor' , 'site editor title tag' );
2021-11-09 03:17:17 +01:00
$parent_file = 'themes.php' ;
// Flag that we're loading the block editor.
$current_screen = get_current_screen ();
$current_screen -> is_block_editor ( true );
2021-11-09 10:14:02 +01:00
// Default to is-fullscreen-mode to avoid jumps in the UI.
add_filter (
'admin_body_class' ,
2023-09-12 17:23:18 +02:00
static function ( $classes ) {
2021-11-09 10:14:02 +01:00
return " $classes is-fullscreen-mode " ;
}
);
2021-12-07 17:40:01 +01:00
$indexed_template_types = array ();
foreach ( get_default_block_template_types () as $slug => $template_type ) {
$template_type [ 'slug' ] = ( string ) $slug ;
$indexed_template_types [] = $template_type ;
}
2022-03-17 04:37:05 +01:00
$block_editor_context = new WP_Block_Editor_Context ( array ( 'name' => 'core/edit-site' ) );
2021-11-23 06:40:38 +01:00
$custom_settings = array (
2022-09-15 14:20:09 +02:00
'siteUrl' => site_url (),
'postsPerPage' => get_option ( 'posts_per_page' ),
'styles' => get_block_editor_theme_styles (),
'defaultTemplateTypes' => $indexed_template_types ,
'defaultTemplatePartAreas' => get_allowed_block_template_part_areas (),
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
'supportsLayout' => wp_theme_has_theme_json (),
2022-09-15 14:20:09 +02:00
'supportsTemplatePartsMode' => ! wp_is_block_theme () && current_theme_supports ( 'block-template-parts' ),
2021-11-09 03:17:17 +01:00
);
2022-05-17 16:38:14 +02:00
// Add additional back-compat patterns registered by `current_screen` et al.
$custom_settings [ '__experimentalAdditionalBlockPatterns' ] = WP_Block_Patterns_Registry :: get_instance () -> get_all_registered ( true );
$custom_settings [ '__experimentalAdditionalBlockPatternCategories' ] = WP_Block_Pattern_Categories_Registry :: get_instance () -> get_all_registered ( true );
2022-05-23 22:40:14 +02:00
$editor_settings = get_block_editor_settings ( $custom_settings , $block_editor_context );
2021-11-23 06:40:38 +01:00
if ( isset ( $_GET [ 'postType' ] ) && ! isset ( $_GET [ 'postId' ] ) ) {
$post_type = get_post_type_object ( $_GET [ 'postType' ] );
if ( ! $post_type ) {
wp_die ( __ ( 'Invalid post type.' ) );
2021-11-12 04:55:01 +01:00
}
2021-12-14 02:57:26 +01:00
}
2021-11-12 04:55:01 +01:00
Themes: Rename public static functions in `WP_Theme_JSON_Resolver` to remove `custom_post_type` references.
WordPress Core is not really custom and does not reference "custom post type" in its function naming. This commit renames 2 public static methods:
* `WP_Theme_JSON_Resolver::get_user_custom_post_type_id()` renamed to `WP_Theme_JSON_Resolver::get_user_global_styles_post_id()`.
* `WP_Theme_JSON_Resolver::get_user_data_from_custom_post_type()` renamed to `WP_Theme_JSON_Resolver:: get_user_data_from_wp_global_styles()`.
Follow-up to [52049], [52051], [52069], [52232], [52275], [52364].
Props antonvlasenko, bernhard-reiter, costdev, desrosj, hellofromTonya, noisysocks, oandregal, SergeyBiryukov.
Fixes #54517.
Built from https://develop.svn.wordpress.org/trunk@52372
git-svn-id: http://core.svn.wordpress.org/trunk@51964 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-12-14 17:14:01 +01:00
$active_global_styles_id = WP_Theme_JSON_Resolver :: get_user_global_styles_post_id ();
2022-11-11 17:26:12 +01:00
$active_theme = get_stylesheet ();
2023-06-27 08:38:26 +02:00
$navigation_rest_route = rest_get_route_for_post_type_items (
'wp_navigation'
);
$preload_paths = array (
2024-09-04 06:17:14 +02:00
array ( rest_get_route_for_post_type_items ( 'attachment' ), 'OPTIONS' ),
array ( rest_get_route_for_post_type_items ( 'page' ), 'OPTIONS' ),
2022-04-07 15:40:04 +02:00
'/wp/v2/types?context=view' ,
2021-12-14 02:57:26 +01:00
'/wp/v2/types/wp_template?context=edit' ,
2024-08-16 08:23:17 +02:00
'/wp/v2/types/wp_template_part?context=edit' ,
2021-12-14 02:57:26 +01:00
'/wp/v2/templates?context=edit&per_page=-1' ,
'/wp/v2/template-parts?context=edit&per_page=-1' ,
'/wp/v2/themes?context=edit&status=active' ,
'/wp/v2/global-styles/' . $active_global_styles_id . '?context=edit' ,
2024-10-29 04:13:19 +01:00
array ( '/wp/v2/global-styles/' . $active_global_styles_id , 'OPTIONS' ),
'/wp/v2/global-styles/themes/' . $active_theme . '?context=view' ,
'/wp/v2/global-styles/themes/' . $active_theme . '/variations?context=view' ,
2023-06-27 08:38:26 +02:00
array ( $navigation_rest_route , 'OPTIONS' ),
array (
add_query_arg (
array (
'context' => 'edit' ,
'per_page' => 100 ,
'order' => 'desc' ,
'orderby' => 'date' ,
// array indices are required to avoid query being encoded and not matching in cache.
'status[0]' => 'publish' ,
'status[1]' => 'draft' ,
),
$navigation_rest_route
),
'GET' ,
),
2021-12-14 02:57:26 +01:00
);
2021-11-23 06:40:38 +01:00
2021-12-14 02:57:26 +01:00
block_editor_rest_api_preload ( $preload_paths , $block_editor_context );
2021-11-23 06:40:38 +01:00
2021-12-14 02:57:26 +01:00
wp_add_inline_script (
'wp-edit-site' ,
sprintf (
' wp . domReady ( function () {
wp . editSite . initializeEditor ( " site-editor " , % s );
} ); ' ,
wp_json_encode ( $editor_settings )
)
);
2021-11-09 03:17:17 +01:00
// Preload server-registered block schemas.
wp_add_inline_script (
'wp-blocks' ,
'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode ( get_block_editor_server_block_settings () ) . ');'
);
2024-10-15 10:52:17 +02:00
// Preload server-registered block bindings sources.
$registered_sources = get_all_registered_block_bindings_sources ();
if ( ! empty ( $registered_sources ) ) {
$filtered_sources = array ();
foreach ( $registered_sources as $source ) {
$filtered_sources [] = array (
'name' => $source -> name ,
'label' => $source -> label ,
'usesContext' => $source -> uses_context ,
);
}
$script = sprintf ( 'for ( const source of %s ) { wp.blocks.registerBlockBindingsSource( source ); }' , wp_json_encode ( $filtered_sources ) );
wp_add_inline_script (
'wp-blocks' ,
$script
);
}
2021-11-09 03:17:17 +01:00
wp_add_inline_script (
'wp-blocks' ,
2022-07-27 14:27:16 +02:00
sprintf ( 'wp.blocks.setCategories( %s );' , wp_json_encode ( isset ( $editor_settings [ 'blockCategories' ] ) ? $editor_settings [ 'blockCategories' ] : array () ) ),
2021-11-09 03:17:17 +01:00
'after'
);
wp_enqueue_script ( 'wp-edit-site' );
wp_enqueue_script ( 'wp-format-library' );
wp_enqueue_style ( 'wp-edit-site' );
wp_enqueue_style ( 'wp-format-library' );
wp_enqueue_media ();
if (
Editor: Fix 'wp-block-library-theme' style enqueue conditions.
Fixes the conditions for when to enqueue the opinionated block styles (i.e. `'wp-block-library-theme'` stylesheet):
* the theme adds `'wp-block-styles'` theme support;
* and no editor styles are declared.
This resolves an issue with themes that do not add the `'wp-block-styles'` theme support while not impacting themes that do.
Follow-up to [53419], [52069], [50761], [44157].
Props mikachan, costdev, glendaviesnz, hellofromTonya, jffng, mamaduka, ndiego, poena, sannevndrmeulen, scruffian.
Fixes #57561.
Built from https://develop.svn.wordpress.org/trunk@55368
git-svn-id: http://core.svn.wordpress.org/trunk@54901 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-02-20 22:13:27 +01:00
current_theme_supports ( 'wp-block-styles' ) &&
2021-11-09 03:17:17 +01:00
( ! is_array ( $editor_styles ) || count ( $editor_styles ) === 0 )
) {
wp_enqueue_style ( 'wp-block-library-theme' );
}
/** This action is documented in wp-admin/edit-form-blocks.php */
do_action ( 'enqueue_block_editor_assets' );
require_once ABSPATH . 'wp-admin/admin-header.php' ;
?>
2023-06-26 06:48:24 +02:00
< div class = " edit-site " id = " site-editor " >
2023-06-25 21:54:22 +02:00
< ? php // JavaScript is disabled. ?>
< div class = " wrap hide-if-js site-editor-no-js " >
< h1 class = " wp-heading-inline " >< ? php _e ( 'Edit site' ); ?> </h1>
2023-09-14 02:54:19 +02:00
< ? php
/**
* Filters the message displayed in the site editor interface when JavaScript is
* not enabled in the browser .
*
* @ since 6.3 . 0
*
* @ param string $message The message being displayed .
* @ param WP_Post $post The post being edited .
*/
$message = apply_filters ( 'site_editor_no_javascript_message' , __ ( 'The site editor requires JavaScript. Please enable JavaScript in your browser settings.' ), $post );
wp_admin_notice (
$message ,
array (
'type' => 'error' ,
'additional_classes' => array ( 'hide-if-js' ),
)
);
?>
2023-06-25 21:54:22 +02:00
</ div >
</ div >
2021-11-09 03:17:17 +01:00
< ? php
require_once ABSPATH . 'wp-admin/admin-footer.php' ;