Make WordPress Core

Changeset 34780


Ignore:
Timestamp:
10/02/2015 08:23:54 PM (11 years ago)
Author:
johnbillion
Message:

Introduce support for array format field names in WP_Widget::get_field_name() and WP_Widget::get_field_id().

Fixes #12133
Props ch1902, welcher

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-widget.php

    r34560 r34780  
    178178         * This function should be used in form() methods to create name attributes for fields to be saved by update()
    179179         *
     180         * @since 4.4.0 Array format field names are now accepted.
     181         *
    180182         * @param string $field_name Field name
    181183         * @return string Name attribute for $field_name
    182184         */
    183185        public function get_field_name($field_name) {
    184                 return 'widget-' . $this->id_base . '[' . $this->number . '][' . $field_name . ']';
     186                if ( false === $pos = strpos( $field_name, '[' ) ) {
     187                        return 'widget-' . $this->id_base . '[' . $this->number . '][' . $field_name . ']';
     188                } else {
     189                        return 'widget-' . $this->id_base . '[' . $this->number . '][' . substr_replace( $field_name, '][', $pos, strlen( '[' ) );
     190                }
    185191        }
    186192
     
    191197         * for fields to be saved by {@see WP_Widget::update()}.
    192198         *
     199         * @since 4.4.0 Array format field IDs are now accepted.
     200         *
    193201         * @since 2.8.0
    194202         * @access public
     
    198206         */
    199207        public function get_field_id( $field_name ) {
    200                 return 'widget-' . $this->id_base . '-' . $this->number . '-' . $field_name;
     208                return 'widget-' . $this->id_base . '-' . $this->number . '-' . trim( str_replace( array( '[]', '[', ']' ), array( '', '-', '' ), $field_name ), '-' );
    201209        }
    202210
  • trunk/tests/phpunit/tests/widgets.php

    r34563 r34780  
    158158        /**
    159159         * @see WP_Widget::get_field_name()
    160          */
    161         function test_wp_widget_get_field_name() {
     160         * @dataProvider data_wp_widget_get_field_name
     161         *
     162         */
     163        function test_wp_widget_get_field_name( $expected, $value_to_test ) {
    162164                $widget = new WP_Widget( 'foo', 'Foo' );
    163165                $widget->_set( 2 );
    164                 $this->assertEquals( 'widget-foo[2][title]', $widget->get_field_name( 'title' ) );
     166                $this->assertEquals( $expected, $widget->get_field_name( $value_to_test ) );
     167        }
     168
     169        /**
     170         * Data provider.
     171         *
     172         * Passes the expected field name and the value to test.
     173         *
     174         * @since 4.4.0
     175         *
     176         * @return array {
     177         *     @type array {
     178         *         @type string $expected      The expected field id to be returned.
     179         *         @type string $value_to_test The value being passed to the get_field_name method.
     180         *     }
     181         * }
     182         */
     183        function data_wp_widget_get_field_name( ) {
     184
     185                return array(
     186                        array(
     187                                'widget-foo[2][title]',
     188                                'title',
     189                        ),
     190                        array(
     191                                'widget-foo[2][posttypes][]',
     192                                'posttypes[]',
     193                        ),
     194                        array(
     195                                'widget-foo[2][posttypes][4]',
     196                                'posttypes[4]',
     197                        ),
     198                        array(
     199                                'widget-foo[2][posttypes][4][]',
     200                                'posttypes[4][]',
     201                        ),
     202                        array(
     203                                'widget-foo[2][posttypes][4][][6]',
     204                                'posttypes[4][][6]',
     205                        ),
     206                );
    165207        }
    166208
    167209        /**
    168210         * @see WP_Widget::get_field_id()
    169          */
    170         function test_wp_widget_get_field_id() {
     211         * @dataProvider data_wp_widget_get_field_id
     212         *
     213         */
     214        function test_wp_widget_get_field_id( $expected, $value_to_test ) {
    171215                $widget = new WP_Widget( 'foo', 'Foo' );
    172216                $widget->_set( 2 );
    173                 $this->assertEquals( 'widget-foo-2-title', $widget->get_field_id( 'title' ) );
     217                $this->assertEquals( $expected, $widget->get_field_id( $value_to_test ) );
     218        }
     219
     220
     221        /**
     222         * Data provider.
     223         *
     224         * Passes the expected field id and the value to be used in the tests.
     225         *
     226         * @since 4.4.0
     227         *
     228         * @return array {
     229         *     @type array {
     230         *         @type string $expected      The expected field id to be returned.
     231         *         @type string $value_to_test The value being passed to the get_field_id method.
     232         *     }
     233         * }
     234         */
     235        function data_wp_widget_get_field_id() {
     236                return array(
     237                        array(
     238                                'widget-foo-2-title',
     239                                'title',
     240                        ),
     241                        array(
     242                                'widget-foo-2-posttypes',
     243                                'posttypes[]',
     244                        ),
     245                        array(
     246                                'widget-foo-2-posttypes-4',
     247                                'posttypes[4]',
     248                        ),
     249                        array(
     250                                'widget-foo-2-posttypes-4',
     251                                'posttypes[4][]',
     252                        ),
     253                        array(
     254                                'widget-foo-2-posttypes-4-6',
     255                                'posttypes[4][][6]',
     256                        ),
     257                );
    174258        }
    175259
Note: See TracChangeset for help on using the changeset viewer.