WordPress.org

Make WordPress Core

Ticket #44098: 44098.diff

File 44098.diff, 3.0 KB (added by SergeyBiryukov, 4 months ago)
  • src/wp-admin/includes/widgets.php

     
    162162        $number = 1;
    163163
    164164        foreach ( $wp_registered_widgets as $widget_id => $widget ) {
    165                 if ( preg_match( '/' . $id_base . '-([0-9]+)$/', $widget_id, $matches ) ) {
     165                if ( preg_match( '/' . preg_quote( $id_base, '/' ) . '-([0-9]+)$/', $widget_id, $matches ) ) {
    166166                        $number = max( $number, $matches[1] );
    167167                }
    168168        }
  • src/wp-includes/class-wp-widget.php

     
    164164                        $id_base = strtolower( $id_base );
    165165                } else {
    166166                        $id_base = preg_replace( '/(wp_)?widget_/', '', strtolower( get_class( $this ) ) );
    167                         $id_base = str_replace( '\\', '-', $id_base );
    168167                }
    169168
    170169                $this->id_base         = $id_base;
     
    173172                $this->widget_options  = wp_parse_args(
    174173                        $widget_options,
    175174                        array(
    176                                 'classname'                   => $this->option_name,
     175                                'classname'                   => str_replace( '\\', '_', $this->option_name ),
    177176                                'customize_selective_refresh' => false,
    178177                        )
    179178                );
  • tests/phpunit/tests/widgets.php

     
    428428        /**
    429429         * @ticket 44098
    430430         * @see WP_Widget::__construct()
    431          * @dataProvider data_wp_widget_id_base
     431         * @dataProvider data_wp_widget_classname
    432432         */
    433         function test_wp_widget_id_base( $expected, $widget_class ) {
     433        function test_wp_widget_classname( $expected, $widget_class ) {
    434434                require_once DIR_TESTDATA . '/widgets/custom-widget-classes.php';
    435435
    436436                $widget = new $widget_class( '', 'Foo' );
    437437
    438                 $this->assertSame( $expected, $widget->id_base );
     438                $this->assertSame( $expected, $widget->widget_options['classname'] );
    439439        }
    440440
    441441        /**
    442442         * Data provider.
    443443         *
    444          * Passes the expected `id_base` value and the class name.
     444         * Passes the expected `classname` value and the class name.
    445445         *
    446446         * @since 5.8.0
    447447         *
    448448         * @return array {
    449449         *     @type array {
    450          *         @type string $expected     The expected `id_base` value to be returned.
     450         *         @type string $expected     The expected `classname` value to be returned.
    451451         *         @type string $widget_class The widget class name for creating an instance.
    452452         *     }
    453453         * }
    454454         */
    455         function data_wp_widget_id_base() {
     455        function data_wp_widget_classname() {
    456456                return array(
    457457                        array(
    458                                 'search',
     458                                'widget_search',
    459459                                'WP_Widget_Search',
    460460                        ),
    461461                        array(
    462                                 'test-sub-sub-namespaced_widget',
     462                                'widget_test_sub_sub_namespaced_widget',
    463463                                'Test\Sub\Sub\Namespaced_Widget',
    464464                        ),
    465465                        array(
    466                                 'non_namespaced_widget',
     466                                'widget_non_namespaced_widget',
    467467                                'Non_Namespaced_Widget',
    468468                        ),
    469469                );