Block Supports: Guard elements hover styles against a missing hover selector.#12312
Block Supports: Guard elements hover styles against a missing hover selector.#12312aaronrobertshaw wants to merge 1 commit into
Conversation
Only render `:hover` element styles for element types that actually define a hover selector. In `wp_render_elements_support_styles()`, only the `link` element type defines a `hover_selector`. If a block's `style.elements` carries a `:hover` object for `button` or `heading`, accessing `$element_config['hover_selector']` reaches for a key that does not exist, emitting an "Undefined array key 'hover_selector'" warning and passing an empty selector to the style engine. Add a `! empty( $element_config['hover_selector'] )` guard so hover processing is skipped for element types without a hover selector, and extend the elements styles test with a `button` `:hover` case that confirms only the base rule is emitted. Backport of Gutenberg PR WordPress/gutenberg#79511. Props aaronrobertshaw. See #65538.
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
|
Hi there! 👋 Thank you for your contribution to WordPress! 💖 It looks like this is your first pull request to No one monitors this repository for new pull requests. Pull requests must be attached to a Trac ticket to be considered for inclusion in WordPress Core. To attach a pull request to a Trac ticket, please include the ticket's full URL in your pull request description. Pull requests are never merged on GitHub. The WordPress codebase continues to be managed through the SVN repository that this GitHub repository mirrors. Please feel free to open pull requests to work on any contribution you are making. More information about how GitHub pull requests can be used to contribute to WordPress can be found in the Core Handbook. Please include automated tests. Including tests in your pull request is one way to help your patch be considered faster. To learn about WordPress' test suites, visit the Automated Testing page in the handbook. If you have not had a chance, please review the Contribute with Code page in the WordPress Core Handbook. The Developer Hub also documents the various coding standards that are followed:
Thank you, |
| ); | ||
|
|
||
| if ( isset( $element_style_object[':hover'], $element_config['hover_selector'] ) ) { | ||
| if ( isset( $element_style_object[':hover'] ) && ! empty( $element_config['hover_selector'] ) ) { |
There was a problem hiding this comment.
I think @westonruter already fixed this in fc826ae / https://core.trac.wordpress.org/ticket/65435
See comment from @Naimur444 in https://core.trac.wordpress.org/ticket/65538#comment:1
So maybe all we need to do is port it back in WordPress/gutenberg#79511
Trac ticket: https://core.trac.wordpress.org/ticket/65538
What?
Backport of Gutenberg PR WordPress/gutenberg#79511.
Only render
:hoverelement styles for element types that actually define a hover selector.Why?
In
wp_render_elements_support_styles(), only thelinkelement type defines ahover_selector. If a block'sstyle.elementscarries a:hoverobject forbuttonorheading, the code reaches for$element_config['hover_selector']on a type that doesn't have it. That emits an "Undefined array key 'hover_selector'" warning and passes an empty selector to the style engine.It's hard to reach through the default UI, but the attribute data can be persisted on a block directly, so the warning stands on its own.
How?
Adds a
! empty( $element_config['hover_selector'] )guard to the:hovercondition so hover processing is skipped for element types without a hover selector. Extends the existing elements styles test with abutton:hovercase that errors on the warning today and confirms only the base rule is emitted.Testing Instructions
Tests_Block_Supports_WpRenderElementsSupportStylesshould pass.