#41394 closed defect (bug) (fixed)
Text widget: Rename legacy mode to visual mode and improve back-compat for widget_text filters
Reported by: | westonruter | Owned by: | westonruter |
---|---|---|---|
Milestone: | 4.8.1 | Priority: | normal |
Severity: | normal | Version: | 4.9 |
Component: | Widgets | Keywords: | has-patch commit fixed-major |
Focuses: | Cc: |
Description (last modified by )
When TinyMCE was introduced to the Text widget in #35243, the filter
prop was overloaded to take a truthy content
string value, in addition to what it had formerly as a simple boolean. The filter=content
was taken to mean that the content filters should apply (widget_text_content
), in addition to just wpautop
. When filter=true
then just wpautop
would apply, and when filter=false
then no wpautop
would apply. The filter=content
prop was then also used as a signal for whether or not the visual editor should be loaded.
Problem: Overloading the filter
boolean to take this tertiary state, however, could cause problems for plugins that look explicitly for a filter=true
value in existing plugins that filterwidget_text
.
In #40951 there was a legacy
boolean prop added to modified Text widgets, to indicate that the visual editor should not be loaded: when legacy=true
then the new TinyMCE editor would be displayed. This new property was added since the filter
property couldn't be overloaded yet further.
Nevertheless, the overloading of the filter
property to be boolean and also a string of content
could be undone, and the legacy
property added in #40951 could change from being a simple single-value flag to instead be a boolean visual
property. A visual=true
property would indicate that TinyMCE should be loaded, whereas visual=false
would indicate that it should not be loaded. If visual=null
when the form is loaded, then the is_legacy_instance
logic is used to set the initial value.
Furthermore, the Custom HTML widget (#40907) applies the widget_text
filters on its content to ensure that when a user moves HTML from a Text widget over to a Custom HTML widget, it will get all of the same filters applied. See [41086]. There are still widget_text_content
and widget_custom_html_content
filters that apply to the Text widget and Custom HTML widget respectively, but they share this same widget_text
filter that has been around since WP 2.3.0.
When the Custom HTML widget applies the widget_text
filters, it is supplying the Custom HTML widget's $instance
as the filter's second argument. This could cause problems for plugins that filter widget_text
because they may expect a widget's instance data to look like:
{ "title": "The Title", "text": "Hello World", "filter": false }
When instead the Custom HTML widget instances look like:
{ "title": "The Title", "content": "Hello World" }
So in order to preserve backwards compatibility for plugins that look at the $instance
param, the instance data needs to be transformed from the Custom HTML instance schema over to the Text widget instance schema.
Attachments (3)
Change History (19)
#1
@
7 years ago
- Keywords has-patch added
- Owner set to westonruter
- Status changed from new to accepted
This ticket was mentioned in Slack in #core-customize by westonruter. View the logs.
7 years ago
#5
@
7 years ago
- Description modified (diff)
- Summary changed from Custom HTML widget applies widget_text filters with unexpected $instance data to Application of widget_text filters passed unexpected $instance data
I'm expanding the scope here to also account for widget_text
filters applying when plugins will expect $instance['filter']
to be a boolean, not a boolean with a possible string value of content
.
#6
@
7 years ago
Work in progress: https://github.com/xwp/wordpress-develop/pull/241
#8
@
7 years ago
- Description modified (diff)
- Summary changed from Application of widget_text filters passed unexpected $instance data to Text widget: Rename legacy mode to visual mode and improve back-compat for widget_text filters
This ticket was mentioned in Slack in #core-customize by westonruter. View the logs.
7 years ago
This ticket was mentioned in Slack in #core-customize by westonruter. View the logs.
7 years ago
#11
@
7 years ago
- Keywords commit added; needs-testing removed
Thanks to @timmydcrawford for testing. I'll commit this in the next couple hours unless someone identifies something.
Might be a little easier to grok. It shouldn't matter if
content
remains or not.