Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove the classic widgets panel only if the theme did not opt out of the new editor #25415

Conversation

adamziel
Copy link
Contributor

@adamziel adamziel commented Sep 17, 2020

Description

Solves #24949 in a very non-elegant way. Let's talk.

The problem is that:

  • The preferred way of removing customizer panels is via the customize_loaded_components hook.
  • The widgets panel should only be removed if the theme does call remove_theme_support( 'widgets-block-editor' ) in response to after_setup_theme action.
  • customize_loaded_components is fired before the theme's functions.php is even loaded!

This PR calls $wp_customize->remove_panel( 'widgets' ); instead, the problem is that it's discouraged and generates a warning since WP 4.5:

"Removing widgets manually will cause PHP warnings. Use the customize_loaded_components filter instead."

https://core.trac.wordpress.org/ticket/35242

It makes sense - the design seems to assume that all the panels not removed via customize_loaded_components are assumed to stay, there may be some core, plugin, or theme code relying on that behavior.

It seems like relying theme support is not going to work for removing the widgets panel. We could either not rely on theme support and figure out a different solution, or remove the panel after the fact and suppress the warning.

CC @draganescu @noisysocks @kevin940726 @talldan @youknowriad

@adamziel adamziel added the [Package] Edit Widgets /packages/edit-widgets label Sep 17, 2020
@adamziel adamziel self-assigned this Sep 17, 2020
@adamziel adamziel changed the title Remove the classic widgets panel only if the theme did not out of the new editor Remove the classic widgets panel only if the theme did not opt out of the new editor Sep 17, 2020
@github-actions
Copy link

Size Change: 0 B

Total Size: 1.2 MB

ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.67 kB 0 B
build/api-fetch/index.js 3.41 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 8.53 kB 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/index.js 128 kB 0 B
build/block-editor/style-rtl.css 11.1 kB 0 B
build/block-editor/style.css 11.1 kB 0 B
build/block-library/editor-rtl.css 8.59 kB 0 B
build/block-library/editor.css 8.59 kB 0 B
build/block-library/index.js 135 kB 0 B
build/block-library/style-rtl.css 7.6 kB 0 B
build/block-library/style.css 7.59 kB 0 B
build/block-library/theme-rtl.css 741 B 0 B
build/block-library/theme.css 741 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 47.8 kB 0 B
build/components/index.js 201 kB 0 B
build/components/style-rtl.css 15.5 kB 0 B
build/components/style.css 15.4 kB 0 B
build/compose/index.js 9.68 kB 0 B
build/core-data/index.js 12.2 kB 0 B
build/data-controls/index.js 1.28 kB 0 B
build/data/index.js 8.55 kB 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 4.48 kB 0 B
build/edit-navigation/index.js 10.7 kB 0 B
build/edit-navigation/style-rtl.css 868 B 0 B
build/edit-navigation/style.css 871 B 0 B
build/edit-post/index.js 305 kB 0 B
build/edit-post/style-rtl.css 6.24 kB 0 B
build/edit-post/style.css 6.22 kB 0 B
build/edit-site/index.js 19 kB 0 B
build/edit-site/style-rtl.css 3.13 kB 0 B
build/edit-site/style.css 3.13 kB 0 B
build/edit-widgets/index.js 16.4 kB 0 B
build/edit-widgets/style-rtl.css 2.75 kB 0 B
build/edit-widgets/style.css 2.75 kB 0 B
build/editor/editor-styles-rtl.css 492 B 0 B
build/editor/editor-styles.css 493 B 0 B
build/editor/index.js 45.3 kB 0 B
build/editor/style-rtl.css 3.8 kB 0 B
build/editor/style.css 3.8 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.71 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 621 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 711 B 0 B
build/keyboard-shortcuts/index.js 2.52 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.12 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.32 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.41 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 13.9 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.69 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@draganescu
Copy link
Contributor

I think this theme support flag is a temporary step, the real solution is via the Classic Editor plugin which can work using the standard panel removal procedure

WordPress/classic-editor#137

@adamziel
Copy link
Contributor Author

@draganescu do you meant that the "widgets" panel should be removed when the classic editor plugin is not installed?

@draganescu
Copy link
Contributor

I am not sure of this, but my initial understanding of this was that the optimal way to opt out was to make it an option in the Classic Editor plugin. This pr makes it so that when you enable the Classic Editor you end up with the classic widgets editor as well.

The problem is it still uses the theme supports. If the theme supports is too late for the customiser we should make it so that feature of the Classic Editor ALSO calls customize_loaded_components.

IMO, there is no real reason to have a theme supports flag. "Supports" is by definition meant fo opt-in! Opting out of the widgets editor should be via plugin - how the plugin does it is a separate subject. We ended up having one simply because the Classic editor was not ready with the opting out feature and we should deprecate it ;)

Copy link
Contributor

@draganescu draganescu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Edit: Wrong PR

@adamziel
Copy link
Contributor Author

Blocked by #25625

Base automatically changed from master to trunk March 1, 2021 15:44
@draganescu
Copy link
Contributor

This is not blocked anymore, as the work on the embedded block editor progresses we need to disable it when the block widgets editor is disabled.

@noisysocks
Copy link
Member

We're moving the old panel using remove_control now.

foreach ( $manager->controls() as $control ) {
if (
$control instanceof WP_Widget_Area_Customize_Control ||
$control instanceof WP_Widget_Form_Customize_Control
) {
$manager->remove_control( $control->id );
}
}

@noisysocks noisysocks closed this Mar 26, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Package] Edit Widgets /packages/edit-widgets
Projects
None yet
3 participants