[wp-trac] [WordPress Trac] #53993: Consider deprecating "function widgets"

WordPress Trac noreply at wordpress.org
Tue Aug 24 13:45:36 UTC 2021


#53993: Consider deprecating "function widgets"
--------------------------+------------------------------
 Reporter:  zieladam      |       Owner:  (none)
     Type:  enhancement   |      Status:  new
 Priority:  normal        |   Milestone:  Awaiting Review
Component:  General       |     Version:
 Severity:  normal        |  Resolution:
 Keywords:  dev-feedback  |     Focuses:
--------------------------+------------------------------
Description changed by zieladam:

Old description:

> WordPress supports two kinds of widgets: based on classes and functions.
>
> Widgets based on classes extend the `WP_Widget` class. They are
> registered like this:
>
> {{{#!php
> <?php
> class WP_Widget_Text { /* ... */ }
> register_widget ( 'WP_Widget_Text' );
> }}}
>
> They have a nice API and may be used multiple times with different
> parameters.
>
> Widgets based on functions are registered like this:
>
> {{{#!php
> <?php
> wp_register_sidebar_widget(
>         'marquee_greeting',
>         'Marquee Greeting',
>         function() {
>                 $greeting = get_option( 'marquee_greeting', 'Hello!' );
>                 printf( '<marquee>%s</marquee>', esc_html( $greeting ) );
>         }
> );
>
> wp_register_widget_control( /* ... */ );
> }}}
>
> They don't support multiple instances and can be only used once. In
> addition, they don't benefit from the WP_Widget API.
>
> Widgets based on functions seem to be extremely uncommon and more of a BC
> artifact rather than a popular, actively used feature. They also
> [https://github.com/WordPress/gutenberg/issues/33104:required adding a
> lot of custom code into the new block-based widgets editor] and will
> continue to be a maintenance burden in the future.
>
> In the Gutenberg repo there was a
> [https://github.com/WordPress/gutenberg/issues/33104:discussion about
> deprecating them to make life easier]. Now I'm opening this Trac issue so
> that we can either take action or decide against it.
>
> Technically speaking, I am not sure where to place the
> `_deprecated_function()` call. At first I thought about
> `wp_register_sidebar_widget` and company, but that API is internally used
> by `WP_Widget` itself:
>
> {{{#!php
> <?php
>
>         public function _register_one( $number = -1 ) {
>                 wp_register_sidebar_widget(
>                         $this->id,
>                         $this->name,
>                         $this->_get_display_callback(),
>                         $this->widget_options,
>                         array( 'number' => $number )
>                 );
> }}}
>

> The second best idea I have is checking if `number` is passed via that
> last argument and issue a notice if it's missing. I wonder if there's a
> better way though.
>
> cc @adraganescu @hellofromtonya @azaozz

New description:

 WordPress supports two kinds of widgets: based on classes and functions.

 Widgets based on classes extend the `WP_Widget` class. They are registered
 like this:

 {{{#!php
 <?php
 class WP_Widget_Text { /* ... */ }
 register_widget ( 'WP_Widget_Text' );
 }}}

 They have a nice API and may be used multiple times with different
 parameters.

 Widgets based on functions are registered like this:

 {{{#!php
 <?php
 wp_register_sidebar_widget(
         'marquee_greeting',
         'Marquee Greeting',
         function() {
                 $greeting = get_option( 'marquee_greeting', 'Hello!' );
                 printf( '<marquee>%s</marquee>', esc_html( $greeting ) );
         }
 );

 wp_register_widget_control( /* ... */ );
 }}}

 They don't support multiple instances and can be only used once. In
 addition, they don't benefit from the WP_Widget API.

 Widgets based on functions seem to be extremely uncommon and more of a BC
 artifact rather than a popular, actively used feature. They also
 [https://github.com/WordPress/gutenberg/issues/33104:required adding a lot
 of custom code into the new block-based widgets editor] and will continue
 to be a maintenance burden in the future.

 In the Gutenberg repo there was a
 [https://github.com/WordPress/gutenberg/issues/33104:discussion about
 deprecating them to make life easier]. Now I'm opening this Trac issue so
 that we can either take action or decide against it.

 Technically speaking, I am not sure where to place the
 `_deprecated_function()` call. At first I thought about
 `wp_register_sidebar_widget` and company, but that API is internally used
 by `WP_Widget` itself:

 {{{#!php
 <?php

         public function _register_one( $number = -1 ) {
                 wp_register_sidebar_widget(
                         $this->id,
                         $this->name,
                         $this->_get_display_callback(),
                         $this->widget_options,
                         array( 'number' => $number )
                 );
 }}}


 The second best idea I have is checking if `number` is passed via that
 last argument and issue a notice if it's missing. I wonder if there's a
 better way though.

 cc @adraganescu @hellofromtonya @azaozz @noisysocks

--

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/53993#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list