Skip to content

Conversation

@luisherranz
Copy link
Member

@luisherranz luisherranz commented Oct 20, 2025

WordPress 6.9 will introduce a new client-side navigation algorithm that starts loading JavaScript when you navigate between pages. However, loading script modules from non-interactive blocks during navigation isn't safe and could cause errors or unexpected behavior. To support this new navigation algorithm, we need a way to identify which script modules belong to interactive blocks in the HTML. This lets the Interactivity API router determine which modules it can safely load during client-side navigation and which ones it should skip.

This PR uses the wp_script_attributes filter to add the data-wp-router-options directive with the loadOnClientNavigation: true property for all interactive blocks that are compatible with client-side navigation.

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

Related Gutenberg PR: WordPress/gutenberg#72449


This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.

@luisherranz
Copy link
Member Author

@westonruter I still have to create a Trac ticket and add tests, but I'd like to know if you agree with this approach.

Copy link
Member

@westonruter westonruter left a comment

Choose a reason for hiding this comment

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

Largely looks good.

@github-actions
Copy link

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • The Plugin and Theme Directories cannot be accessed within Playground.
  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

@luisherranz luisherranz self-assigned this Oct 20, 2025
@luisherranz luisherranz marked this pull request as ready for review October 20, 2025 22:07
@luisherranz
Copy link
Member Author

Thanks @westonruter!

This should be ready for a final review now.

@github-actions
Copy link

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 luisherranz, westonruter.

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

Copy link
Member

@westonruter westonruter left a comment

Choose a reason for hiding this comment

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

@luisherranz I applied some minor edits, but otherwise this is good to go. I can commit if you like.

@luisherranz
Copy link
Member Author

No problem, I've already done it myself. Thanks a lot, Weston!

Committed in edaed03 (r61019).

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants