[wp-trac] [WordPress Trac] #52877: The Widget's Callback Array Stores Wrong Values
WordPress Trac
noreply at wordpress.org
Sun Mar 21 12:45:09 UTC 2021
#52877: The Widget's Callback Array Stores Wrong Values
--------------------------+----------------------------------------
Reporter: oxibug | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Widgets | Version: 5.7
Severity: major | Keywords: needs-patch has-unit-tests
Focuses: |
--------------------------+----------------------------------------
While trying to get Widget's saved settings I stuck a very weird issue,
The objects [number] and [id] in the Widget's Object [callback][0] always
refer to the last widget created.
Create **Two or more of the same Widget**, Then print out the settings,
You will notice that the [number] and [id] inside the [callback] array
different than the main [id] and [number] inside the [params] array, So
when use the [number] from the callback array it refers to a wrong index
which is the last created widget's index not the current.
{{{
add_action( 'wp', 'test_widgets' );
function test_widgets() {
global $wp_registered_widgets;
$widgets_ids = retrieve_widgets( FALSE );
foreach( $widgets_ids as $sb_id => $widgets ) {
if( 'wp_inactive_widgets' === (string) $sb_id ) {
continue;
}
foreach( $widgets as $active_widget_id ) {
if( ! isset( $wp_registered_widgets[ $active_widget_id ] ) ) {
continue;
}
echo print_r( $wp_registered_widgets[ $active_widget_id ] );
/**
* Widget Object
* @var \WP_Widget
* */
$obj_widget = $wp_registered_widgets[
$active_widget_id ]['callback'][0];
/* If you use the callback object to get the Widget's index
it'll refer to a wrong index */
/* TRY: echo $obj_widget->number; */
}
}
}
}}}
**Output:**
{{{
Array
(
[name] => Meta
[id] => meta-4
[callback] => Array
(
[0] => WP_Widget_Meta Object
(
[id_base] => meta
[name] => Meta
[option_name] => widget_meta
[alt_option_name] =>
[widget_options] => Array
(
[classname] => widget_meta
[customize_selective_refresh] => 1
[description] => Login, RSS, & WordPress.org
links.
)
[control_options] => Array
(
[id_base] => meta
)
[number] => 4
[id] => meta-4
[updated] =>
)
[1] => display_callback
)
[params] => Array
(
[0] => Array
(
[number] => 4
)
)
[classname] => widget_meta
[customize_selective_refresh] => 1
[description] => Login, RSS, & WordPress.org links.
)
1Array
(
[name] => Meta
[id] => meta-3
[callback] => Array
(
[0] => WP_Widget_Meta Object
(
[id_base] => meta
[name] => Meta
[option_name] => widget_meta
[alt_option_name] =>
[widget_options] => Array
(
[classname] => widget_meta
[customize_selective_refresh] => 1
[description] => Login, RSS, & WordPress.org
links.
)
[control_options] => Array
(
[id_base] => meta
)
[number] => 4
[id] => meta-4
[updated] =>
)
[1] => display_callback
)
[params] => Array
(
[0] => Array
(
[number] => 3
)
)
[classname] => widget_meta
[customize_selective_refresh] => 1
[description] => Login, RSS, & WordPress.org links.
)
}}}
--
Ticket URL: <https://core.trac.wordpress.org/ticket/52877>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list