Open youknowriad opened 3 months ago
I believed #60466 by @jsnajdr solved most of the big issues we had in terms of maintainability, it's also a path forward towards decoupling the layout from the pages. I believe we can probably start experimenting (and using) with a private API to register routes (replace the router.js file with it).
One thing that's currently odd about the site-editor.php
router is that the routes are not really routes, but just query params. Sometimes there is a path
param, but it's not mandatory. For example, the post edit page has just postType
and postId
and no path
.
In a mainstream router, this would all be just one site-editor.php
route with various query parameters.
@jsnajdr do you think we should explore pretty permalinks to improve that? I guess it still needs to land on site-editor.php anyway
One prior art that comes to mind is the WordPress REST API. You can use the raw, not-pretty URL where you refer to a PHP file and pass all information in query params:
/index.php?rest_route=/wp/v2/categories&per_page=100&order=asc
But the preferred choice is to have a pretty URL where the rest_route
is really a part of the path:
/wp-json/wp/v2/categories?per_page=100&order=asc
I guess that eventually we want to have also wp-admin
pretty URLs like this? For example, instead of
/wp-admin/site-editor.php?path=/page&postId=1
there would be this in the URL bar:
/wp-admin/site-editor/page/1
I think that's feasible and worth exploring. One additional question: do we already have other wp-admin
use cases, other than Site Editor, where we should explore routing? Like, for example, a DataView
enabled Posts page?
My current plan for routing is:
Navigator
refactoring by putting backPath
links everywhere and abandoning the getBackPath
/goToParent
methods. It's a heuristic that works in one particular case, but is not universally applicable. It's not always true that the proper back path for /foo/bar/baz
is /foo/bar
, i.e., removing the last /
suffix.Navigator
/useSyncPathWithURL
logic also from Woo's Customize Store UI. Turns out they have a copy&paste of the Site Editor code š¤¦ @wordpress/router
package.Like, for example, a DataView enabled Posts page?
Actually, I think this is one of the next steps that I want to explore. I didn't track this yet but I do want to see whether we can build a "site editor" like experience for posts/categories to replace the "edit.php" we have right now. Should be an experiment first but I was kind of waiting for the routing work to advance a bit to start on that part.
My current plan for routing is:
Sounds good to me.
This code in useInitEditedEntityFromURL
is also very suboptimal:
From the URL, it determines what should be displayed in the content area. We should move this code to the router's useLayoutAreas
hook, just like we moved the sidebars. useLayoutAreas
currently declares a constant, non-specific preview: <Editor>
for all routes.
@jsnajdr I agree, I think the ideal would be to have postType, postId and context as props to the Editor
component. The problem though is that we still need to keep the state in the edit-site store for backward compatibility. So we'll have to update the state (maybe as an effect in the Editor component or something).
Hi, y'all, will it be possible to hook into the single post route to provide a custom React-based editing experience rather than the Block Editor? (And is this the right place for this question?)
@dannyreaktiv That means that you want to completely disable Gutenberg and replace the post editor with your own custom app? In that case you don't want to hook into anything in the Gutenberg codebase, but do it directly at the WordPress level. The Classic Editor plugin could be an inspiration for this.
@jsnajdr Thanks for replying.
If the post tables are being replaced with DataViews, it would be nice to hook into edit post action to launch a custom view (such as a modal) rather than redirect to the editor.
The site editor has a built-in routing approach that is a bit fragile and hard to scale to the next steps of the Admin Redesign project. It is time to look at it and refactor it to both address its immediate shortcomings (bugs and maintainability) and provide a solid base for the next steps (extensibility, new pages)...
The solution needs to address the following requirements: