Interactivity API: populate router's state.url in the server#10944
Interactivity API: populate router's state.url in the server#10944luisherranz wants to merge 5 commits intoWordPress:trunkfrom
state.url in the server#10944Conversation
|
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. |
Test using WordPress PlaygroundThe 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
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
| wp_interactivity_state( | ||
| 'core/router', | ||
| array( | ||
| 'url' => set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . wp_unslash( $_SERVER['REQUEST_URI'] ) ), |
There was a problem hiding this comment.
Couldn't this just use get_self_link() directly?
| 'url' => set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . wp_unslash( $_SERVER['REQUEST_URI'] ) ), | |
| 'url' => get_self_link(), |
This will handle the case where the $_SERVER['HTTP_HOST'] is not set. Granted, core normally assumes it is set, but not always as in redirect_canonical():
wordpress-develop/src/wp-includes/canonical.php
Lines 68 to 73 in 5600a33
Using get_self_link() will also account for a port number other than the default.
There was a problem hiding this comment.
According to the documentation, I thought that function was related to feeds.
Returns the link for the currently displayed feed.
https://developer.wordpress.org/reference/functions/get_self_link/
But I'll gladly update the code to use it instead 🙂
There was a problem hiding this comment.
True. Well, it's applicable to more than just feeds. We should probably update the description to indicate this at some point.
|
Thanks (as always), Weston! Committed 🙏 |
What
This PR populates
state.urlin thecore/routerInteractivity API namespace on the server, inside thedata-wp-router-regiondirective processor.Trac ticket: https://core.trac.wordpress.org/ticket/64649
Why
After Gutenberg PR WordPress/gutenberg#70882,
state.urlin the interactivity router is no longer unconditionally set towindow.location.hrefon the client. Instead, it falls back towindow.location.hrefonly if the server hasn't already provided a value:This PR provides that server-side value by calling
wp_interactivity_state( 'core/router', ... )during directive processing, following the same URL construction pattern used byredirect_canonical()andget_self_link().How
wp_interactivity_state( 'core/router', array( 'url' => ... ) )call insidedata_wp_router_region_processor()inWP_Interactivity_API.set_url_scheme(),$_SERVER['HTTP_HOST'], and$_SERVER['REQUEST_URI'].Testing
data-wp-router-region)."core/router"with the"url"property matching the current page URL.Use of AI tools
Claude Code was used to research the best way to construct the URL and how other internal WordPress functions do it, and assist in creating the tests.
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.