[wp-trac] [WordPress Trac] #53816: Overview: Refactor the widgets read/write logic
WordPress Trac
noreply at wordpress.org
Wed Jul 28 15:36:57 UTC 2021
#53816: Overview: Refactor the widgets read/write logic
--------------------------+-----------------------------
Reporter: zieladam | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: General | Version:
Severity: normal | Keywords:
Focuses: |
--------------------------+-----------------------------
This is an overview/epic issue that serves as the place to have a
discussion and also points to many smaller sub-issues.
Widgets-related logic in core got quite confusing over the years. As a
result, we've dealt with problems such as
[https://github.com/WordPress/gutenberg/issues/33335#issuecomment-879903958
Blocks moving to "Inactive widgets" after saving] (temporarily solved by
adding an unexpected [https://github.com/WordPress/wordpress-
develop/pull/1498 wp_get_sidebars_widgets();] call).
There are a few problems there:
* We have multiple global variables with closely related or even roughly
the same data (`$sidebars_widgets`+`$_wp_sidebars_widgets`, also
`$wp_registered_sidebars`, `$sidebars_widgets`, `$wp_registered_widgets`,
`$wp_registered_sidebars`). If we update one, we should also update the
others for consistency. Sometimes we don't and we run into
[https://github.com/WordPress/gutenberg/issues/33335#issuecomment-879903958
undefined behaviors].
* We use a function called `retrieve_widgets` as a mean to fix any
discrepancies in the stored sidebar-to-widget mapping. It's called
`retrieve`, but it actually does some writing. This is a source of
confusion in itself so I [https://core.trac.wordpress.org/ticket/53811
proposed renaming it].
* We [https://github.com/WordPress/wordpress-develop/pull/1433 we have to
call retrieve_widgets in GET API endpoints] which makes it read-write, not
read-only. This breaks HTTP caching and is also a
[https://github.com/WordPress/gutenberg/issues/33335#issuecomment-879903958
source of bugs].
I don't think we're able to address the proliferation of global variables
– it seems like a major BC break. However, we should still be able to
improve the `retrieve_widgets` situation.
Ideally it would:
☐ Be less monolithic and have a clear, encapsulated flow of logic (as
suggested by @helloFromTonya)
☐ [https://core.trac.wordpress.org/ticket/53811 Have a name suggesting a
write, e.g. `remap_widgets`]
☐ [https://github.com/WordPress/wordpress-develop/pull/1525 Always be
called **after** a write]
☐ Always be called **after** a theme change
☐ Never be required to perform a read
☐ Never be called in GET request handlers
cc @timotybjacobs @noisysocks @adraganescu @talldan @hellofromTonya
@desrosj
--
Ticket URL: <https://core.trac.wordpress.org/ticket/53816>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list