[wp-trac] [WordPress Trac] #46541: widget class name sent in headers is incorrect when the widget has a namespace
WordPress Trac
noreply at wordpress.org
Sun Mar 17 02:50:47 UTC 2019
#46541: widget class name sent in headers is incorrect when the widget has a
namespace
--------------------------+------------------------------
Reporter: dlorre | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Widgets | Version: 5.1
Severity: normal | Resolution:
Keywords: | Focuses:
--------------------------+------------------------------
Changes (by SergeyBiryukov):
* component: General => Widgets
Old description:
> It looks like WordPress is removing the '\' from a class name in the
> headers, this leads to difficulties making Oxygen to function with
> Multisite Language Switcher for instance.
>
> Here is what is done in Oxygen to integrate a widget:
>
> {{{#!php
> <?php
> $component_json = file_get_contents('php://input');
> $component = json_decode( $component_json, true );
> $options = $component['options']['original'];
> ...
>
> if (
> $GLOBALS['wp_widget_factory']->widgets[$options['class_name']] ) {
> ... do stuff
> }
> else {
> printf( __("<b>Error!</b><br/> No '%s' widget registered
> in this installation", "component-theme"), $options['class_name'] );
> }
>
> }}}
>
> This does not work with multisite language switcher plugin since it is
> registered as "llocMslsMslsWidget" in $options and "lloc\Msls\MslsWidget"
> in $GLOBALS.
>
> I think it is a WordPress bug because there is no reason to register a
> class name without the '\'. Alternatively you may want to replace the '\'
> with '_' but then you'd have to do the same in
> $GLOBALS['wp_widget_factory']
New description:
It looks like WordPress is removing the '\' from a class name in the
headers, this leads to difficulties making Oxygen to function with
Multisite Language Switcher for instance.
Here is what is done in Oxygen to integrate a widget:
{{{#!php
<?php
$component_json = file_get_contents('php://input');
$component = json_decode( $component_json, true );
$options = $component['options']['original'];
...
if (
$GLOBALS['wp_widget_factory']->widgets[$options['class_name']] ) {
... do stuff
}
else {
printf( __("<b>Error!</b><br/> No '%s' widget registered
in this installation", "component-theme"), $options['class_name'] );
}
}}}
This does not work with multisite language switcher plugin since it is
registered as "llocMslsMslsWidget" in `$options` and
"lloc\Msls\MslsWidget" in `$GLOBALS`.
I think it is a WordPress bug because there is no reason to register a
class name without the '\'. Alternatively you may want to replace the '\'
with '_' but then you'd have to do the same in
`$GLOBALS['wp_widget_factory']`
--
--
Ticket URL: <https://core.trac.wordpress.org/ticket/46541#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list