summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
authorRobert Anderson <noisysocks@git.wordpress.org>2021-07-09 01:17:41 +0000
committerRobert Anderson <noisysocks@git.wordpress.org>2021-07-09 01:17:41 +0000
commitf49d48fdcb30f48307ccab183f9103d8b4527e5c (patch)
treee6d2128d1dc59df6ec15dee5afd028deabdf72f7 /src
parent5d9c39866937eb857c6261a8a533643e2c4d5fd0 (diff)
downloadwordpress-f49d48fdcb30f48307ccab183f9103d8b4527e5c.tar.gz
wordpress-f49d48fdcb30f48307ccab183f9103d8b4527e5c.zip
Widgets: Warn when wp-editor script or wp-edit-post style is enqueued in widgets editor
It is common that plugins erroneously have `wp-editor` or `wp-edit-post` as a dependency in a script that is loaded in the new widgets editor. This is a smell since both `@wordpress/editor` and `@wordpress/edit-post` assume the existence of a global "post" object which the widgets editor does not have. [51387] fixes the user-facing errors typically caused by this mistake, but we can go a step further and warn developers about this by calling `_doing_it_wrong()` when we detect that the `wp-editor` script or `wp-edit-post` style is enqueued alongside `wp-edit-widgets` or `wp-customize-widgets`. See #53437. Fixes #53569. Props zieladam, spacedmonkey, TimothyBlynJacobs, andraganescu, dlh. git-svn-id: https://develop.svn.wordpress.org/trunk@51388 602fd350-edb4-49c9-b593-d223f7449a82
Diffstat (limited to 'src')
-rw-r--r--src/wp-includes/default-filters.php1
-rw-r--r--src/wp-includes/widgets.php36
2 files changed, 37 insertions, 0 deletions
diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php
index 068ca78b4d..a446eed1c2 100644
--- a/src/wp-includes/default-filters.php
+++ b/src/wp-includes/default-filters.php
@@ -566,6 +566,7 @@ add_action( 'admin_print_scripts-index.php', 'wp_localize_community_events' );
add_filter( 'wp_print_scripts', 'wp_just_in_time_script_localization' );
add_filter( 'print_scripts_array', 'wp_prototype_before_jquery' );
add_filter( 'customize_controls_print_styles', 'wp_resource_hints', 1 );
+add_action( 'admin_head', 'wp_check_widget_editor_deps' );
// Global styles can be enqueued in both the header and the footer. See https://core.trac.wordpress.org/ticket/53494.
add_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles' );
diff --git a/src/wp-includes/widgets.php b/src/wp-includes/widgets.php
index ff2e219c5e..a092c00c7d 100644
--- a/src/wp-includes/widgets.php
+++ b/src/wp-includes/widgets.php
@@ -2006,3 +2006,39 @@ function wp_render_widget_control( $id ) {
return ob_get_clean();
}
+
+/**
+ * The 'wp-editor' script module is exposed as window.wp.editor. This overrides
+ * the legacy TinyMCE editor module which is required by the widgets editor.
+ * Because of that conflict, these two shouldn't be enqueued together. See
+ * https://core.trac.wordpress.org/ticket/53569.
+ *
+ * There is also another conflict related to styles where the block widgets
+ * editor is hidden if a block enqueues 'wp-edit-post' stylesheet. See
+ * https://core.trac.wordpress.org/ticket/53569.
+ *
+ * @since 5.8.0
+ * @access private
+ */
+function wp_check_widget_editor_deps() {
+ global $wp_scripts, $wp_styles;
+ if (
+ $wp_scripts->query( 'wp-edit-widgets', 'enqueued' ) ||
+ $wp_scripts->query( 'wp-customize-widgets', 'enqueued' )
+ ) {
+ if ( $wp_scripts->query( 'wp-editor', 'enqueued' ) ) {
+ _doing_it_wrong(
+ 'enqueue_script',
+ '"wp-editor" script should not be enqueued together with the new widgets editor (wp-edit-widgets or wp-customize-widgets).',
+ '5.8.0'
+ );
+ }
+ if ( $wp_styles->query( 'wp-edit-post', 'enqueued' ) ) {
+ _doing_it_wrong(
+ 'enqueue_style',
+ '"wp-edit-post" style should not be enqueued together with the new widgets editor (wp-edit-widgets or wp-customize-widgets).',
+ '5.8.0'
+ );
+ }
+ }
+}