[wp-trac] [WordPress Trac] #55220: Legacy widgets lack access to some usual server-side globals
WordPress Trac
noreply at wordpress.org
Tue Feb 22 00:59:03 UTC 2022
#55220: Legacy widgets lack access to some usual server-side globals
--------------------------+----------------------------
Reporter: noisysocks | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Future Release
Component: Widgets | Version:
Severity: normal | Keywords:
Focuses: |
--------------------------+----------------------------
Copied from https://github.com/WordPress/gutenberg/issues/33404.
---
## Description
Legacy widgets whose behavior depends on the `$pagenow` global might not
render as expected via the new `/wp/v2/widget-types/fm-demo/encode` REST
API endpoint because `$pagenow` during these requests is `index.php`, not
`widget.php`.
Additionally, legacy widgets are no longer able to rely on the
`$_POST['action']` variable during requests to save widget data, which is
usually set to `save-widget`, and these widgets might not be able to save
data as expected.
Similarly, legacy widgets are no longer able to rely on `DOING_AJAX` or
`wp_doing_ajax()`, although that is typical of the REST API.
## Step-by-step reproduction instructions
The easiest way to observe this behavior is to observe `$pagenow` and
`$_POST` using Xdebug with a breakpoint inside of
`WP_REST_Widget_Types_Controller::encode_form_data()`.
To see the effect of the behavior on a real-world library:
1. Clone and include the Fieldmanager library:
https://github.com/alleyinteractive/wordpress-fieldmanager
2. Clone and include the Fieldmanager Widgets extension:
https://github.com/alleyinteractive/fm-widgets/
3. Load the demo widget included in the README:
https://github.com/alleyinteractive/fm-
widgets/blob/296d5aef0585f3ff9bcf223e30867e069c13e2ca/README.md
4. Step through the `\fm_widgets_calculated_context()` function, which
relies on all of the signals mentioned in the description.
## Expected behaviour
With respect to legacy widgets, `$pagenow` will be `widgets.php` during
form rendering, and `$_POST['action']` will be `save-widget` during
saving.
## Actual behaviour
`$pagenow` is `index.php`, and `$_POST['action']` is unset.
## Code snippet (optional)
See README link above.
## WordPress information
- WordPress version: 5.8-RC2
- Gutenberg version: Not installed
- Are all plugins except Gutenberg deactivated? No, see repro steps.
- Are you using a default theme (e.g. Twenty Twenty-One)? Yes
## Device information
- Device: Desktop
- Operating system: macOS 10.14
- Browser: Chrome 91
--
Ticket URL: <https://core.trac.wordpress.org/ticket/55220>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list