Make WordPress Core

Ticket #59774: 59774.diff

File 59774.diff, 3.4 KB (added by david.binda, 12 months ago)
  • src/wp-includes/class-wp-list-util.php

     
    165165                         */
    166166                        foreach ( $this->output as $key => $value ) {
    167167                                if ( is_object( $value ) ) {
    168                                         $newlist[ $key ] = $value->$field;
     168                                        if ( property_exists( $value, $field ) ) {
     169                                                $newlist[ $key ] = $value->$field;
     170                                        }
    169171                                } elseif ( is_array( $value ) ) {
    170                                         $newlist[ $key ] = $value[ $field ];
     172                                        if ( array_key_exists( $field, $value ) ) {
     173                                                $newlist[ $key ] = $value[ $field ];
     174                                        }
    171175                                } else {
    172176                                        _doing_it_wrong(
    173177                                                __METHOD__,
     
    188192                 */
    189193                foreach ( $this->output as $value ) {
    190194                        if ( is_object( $value ) ) {
    191                                 if ( isset( $value->$index_key ) ) {
    192                                         $newlist[ $value->$index_key ] = $value->$field;
    193                                 } else {
    194                                         $newlist[] = $value->$field;
     195                                if ( property_exists( $value, $field ) ) {
     196                                        if ( property_exists( $value, $index_key ) ) {
     197                                                $newlist[ $value->$index_key ] = $value->$field;
     198                                        } else {
     199                                                $newlist[] = $value->$field;
     200                                        }
    195201                                }
    196202                        } elseif ( is_array( $value ) ) {
    197                                 if ( isset( $value[ $index_key ] ) ) {
    198                                         $newlist[ $value[ $index_key ] ] = $value[ $field ];
    199                                 } else {
    200                                         $newlist[] = $value[ $field ];
     203                                if ( array_key_exists( $field, $value ) ) {
     204                                        if ( array_key_exists( $index_key, $value ) ) {
     205                                                $newlist[ $value[ $index_key ] ] = $value[ $field ];
     206                                        } else {
     207                                                $newlist[] = $value[ $field ];
     208                                        }
    201209                                }
    202210                        } else {
    203211                                _doing_it_wrong(
  • tests/phpunit/tests/functions/wpListPluck.php

     
    271271                                                'abc' => 'xyz',
    272272                                        ),
    273273                                        array(
    274                                                 'foo'   => 'foo',
    275274                                                '123'   => '456',
    276275                                                'lorem' => 'ipsum',
    277276                                                'key'   => 'bar',
     
    285284                                'key',
    286285                                array(
    287286                                        'bar',
    288                                         'bar'   => 'foo',
    289287                                        'value' => 'baz',
    290288                                ),
    291289                        ),
     290                        'arrays with key missing'        => array(
     291                                array(
     292                                        array(
     293                                                'foo' => 'bar',
     294                                                'bar' => 'baz',
     295                                                'abc' => 'xyz',
     296                                        ),
     297                                        array(
     298                                                'foo'   => 'foo',
     299                                                '123'   => '456',
     300                                                'lorem' => 'ipsum',
     301                                                'key'   => 'bar',
     302                                        ),
     303                                        array(
     304                                                'foo' => 'baz',
     305                                                'key' => 'value',
     306                                        ),
     307                                ),
     308                                'key',
     309                                null,
     310                                array(
     311                                        1 => 'bar',
     312                                        2 => 'value',
     313                                )
     314                        ),
    292315                        'objects'                        => array(
    293316                                array(
    294317                                        (object) array(
     
    342365                                                'abc' => 'xyz',
    343366                                        ),
    344367                                        (object) array(
    345                                                 'foo'   => 'foo',
    346368                                                '123'   => '456',
    347369                                                'lorem' => 'ipsum',
    348370                                                'key'   => 'bar',
     
    356378                                'key',
    357379                                array(
    358380                                        'bar',
    359                                         'bar'   => 'foo',
    360381                                        'value' => 'baz',
    361382                                ),
    362383                        ),
     384                        'objects with field missing'     => array(
     385                                array(
     386                                        (object) array(
     387                                                'foo' => 'bar',
     388                                                'bar' => 'baz',
     389                                                'abc' => 'xyz',
     390                                        ),
     391                                        (object) array(
     392                                                'foo'   => 'foo',
     393                                                '123'   => '456',
     394                                                'lorem' => 'ipsum',
     395                                                'key'   => 'bar',
     396                                        ),
     397                                        (object) array(
     398                                                'foo' => 'baz',
     399                                                'key' => 'value',
     400                                        ),
     401                                ),
     402                                'key',
     403                                null,
     404                                array(
     405                                        1 => 'bar',
     406                                        2 => 'value',
     407                                ),
     408                        ),
    363409                );
    364410        }
    365411}