Skip to content

Block Supports: Guard elements hover styles against a missing hover selector.#12312

Open
aaronrobertshaw wants to merge 1 commit into
WordPress:trunkfrom
aaronrobertshaw:fix/elements-hover-selector-guard
Open

Block Supports: Guard elements hover styles against a missing hover selector.#12312
aaronrobertshaw wants to merge 1 commit into
WordPress:trunkfrom
aaronrobertshaw:fix/elements-hover-selector-guard

Conversation

@aaronrobertshaw

@aaronrobertshaw aaronrobertshaw commented Jun 24, 2026

Copy link
Copy Markdown

Trac ticket: https://core.trac.wordpress.org/ticket/65538

What?

Backport of Gutenberg PR WordPress/gutenberg#79511.

Only render :hover element styles for element types that actually define a hover selector.

Why?

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, 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 :hover condition so hover processing is skipped for element types without a hover selector. Extends the existing elements styles test with a button :hover case that errors on the warning today and confirms only the base rule is emitted.

Testing Instructions

  1. The updated Tests_Block_Supports_WpRenderElementsSupportStyles should pass.

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.
@github-actions

Copy link
Copy Markdown

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 props-bot label.

Core Committers: Use this line as a base for the props when committing in SVN:

Props aaronrobertshaw.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@github-actions

Copy link
Copy Markdown

Hi there! 👋

Thank you for your contribution to WordPress! 💖

It looks like this is your first pull request to wordpress-develop. Here are a few things to be aware of that may help you out!

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,
The WordPress Project

);

if ( isset( $element_style_object[':hover'], $element_config['hover_selector'] ) ) {
if ( isset( $element_style_object[':hover'] ) && ! empty( $element_config['hover_selector'] ) ) {

@ramonjd ramonjd Jun 25, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants