Make WordPress Core

Ticket #52728: 52728.diff

File 52728.diff, 2.1 KB (added by dlh, 4 years ago)
  • src/wp-includes/class-wp-widget.php

    diff --git src/wp-includes/class-wp-widget.php src/wp-includes/class-wp-widget.php
    index 8d1de7c375..2a7320104c 100644
    class WP_Widget { 
    237237         * @since 2.8.0
    238238         */
    239239        public function _register() {
    240                 $settings = $this->get_settings();
     240                $settings = $this->get_settings_array();
    241241                $empty    = true;
    242242
    243                 // When $settings is an array-like object, get an intrinsic array for use with array_keys().
    244                 if ( $settings instanceof ArrayObject || $settings instanceof ArrayIterator ) {
    245                         $settings = $settings->getArrayCopy();
    246                 }
    247 
    248243                if ( is_array( $settings ) ) {
    249244                        foreach ( array_keys( $settings ) as $number ) {
    250245                                if ( is_numeric( $number ) ) {
    class WP_Widget { 
    350345
    351346                $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) );
    352347                $this->_set( $widget_args['number'] );
    353                 $instances = $this->get_settings();
     348                $instances = $this->get_settings_array();
    354349
    355350                if ( array_key_exists( $this->number, $instances ) ) {
    356351                        $instance = $instances[ $this->number ];
    class WP_Widget { 
    570565         *
    571566         * @since 2.8.0
    572567         *
    573          * @return array Multi-dimensional array of widget instance settings.
     568         * @return array|ArrayObject|ArrayIterator Multi-dimensional array of widget instance settings.
     569         *                                         Customized widget storage implementations may also
     570         *                                         return ArrayObject or ArrayIterators instances.
    574571         */
    575572        public function get_settings() {
    576573
    class WP_Widget { 
    597594                unset( $settings['_multiwidget'], $settings['__i__'] );
    598595                return $settings;
    599596        }
     597
     598        /**
     599         * Retrieves the settings for all instances as an array.
     600         *
     601         * @since 5.x.y
     602         *
     603         * @return array Array of widget instance settings.
     604         */
     605        private function get_settings_array() {
     606                $settings = $this->get_settings();
     607
     608                if ( $settings instanceof ArrayObject || $settings instanceof ArrayIterator ) {
     609                        $settings = $settings->getArrayCopy();
     610                }
     611
     612                if ( ! is_array( $settings ) ) {
     613                        $settings = array();
     614                }
     615
     616                return $settings;
     617        }
    600618}