Opened 3 years ago
Last modified 7 months ago
#44098 new defect (bug)
Widget classes when custom widget class is namespaced
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Awaiting Review | Priority: | normal |
Severity: | normal | Version: | 5.4.2 |
Component: | Widgets | Keywords: | has-patch dev-feedback needs-testing needs-unit-tests |
Focuses: | Cc: |
Description
Widgets output from a namespaced class have a class added to the before_widget
argument in a way which is potentially confusing and messy to work with.
The before_widget
value within the arguments array sent to the widget()
method within WP_Widget
looks something like this when using a namespaced custom widget class:
<aside class="widget \myplugin\My_Widget" id="mywidgetname_widget-1">'
Given my understanding of WP's "normal" escaping of attributes, I would have expected myplugin-My_Widget
, mywidgetname myplugin-My_Widget
or maybe mypluginMy_Widget
.
I believe that technically the two escape characters make the WP output the equivalent to the latter, but it's a bit messy and potentially confusing to folks looking to style the output, or find the aside
using JS.
Attachments (1)
Change History (6)
#2
@
7 months ago
- Keywords needs-patch added; reporter-feedback removed
- Version set to 5.4.2
I can confirm the issue.
This happens when you don't define the id_base that is automatically generated.
<?php // https://developer.wordpress.org/reference/classes/wp_widget/ // line 163 $this->id_base = empty( $id_base ) ? preg_replace( '/(wp_)?widget_/', '', strtolower( get_class( $this ) ) ) : strtolower( $id_base );
So it use the class to generate it but if it is a namespace generated namespace\sub\sub\class
doesn't do anything creating this issues.
@
7 months ago
Whan happens when the widget is a class initialized by a namespace without id_base defined
This ticket was mentioned in PR #435 on WordPress/wordpress-develop by Mte90.
7 months ago
- Keywords has-patch added; needs-patch removed
As https://core.trac.wordpress.org/ticket/44098 this happens when the widget is initialized without defining the id_base
that is auto generated. The problem is that doesn't handle namespaces so this can create warning by php because the preg_match include a string with a backslash \
.
Trac ticket:
@rogerlos thanks for the ticket! Can you share the code you are using to register the widget? My local tests are not getting the same results.