Make WordPress Core


Ignore:
Timestamp:
02/27/2024 10:36:09 PM (13 months ago)
Author:
hellofromTonya
Message:

General: Revert r57698 for WP_List_Util::pluck().

r57698 caused a regression for arrays of objects which have magic methods and dynamic properties. A fix is identified.

However, a deeper dive discovered additional scenarios which will require a different fix.

Reverting gives more time for resolving these scenarios and more soak time to discover if there are others.

Props dd32, jamescollins, swissspidy.
See #59774.

File:
1 edited

Legend:

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

    r57698 r57732  
    166166            foreach ( $this->output as $key => $value ) {
    167167                if ( is_object( $value ) ) {
    168                     if ( property_exists( $value, $field ) ) {
    169                         $newlist[ $key ] = $value->$field;
    170                     }
     168                    $newlist[ $key ] = $value->$field;
    171169                } elseif ( is_array( $value ) ) {
    172                     if ( array_key_exists( $field, $value ) ) {
    173                         $newlist[ $key ] = $value[ $field ];
    174                     }
     170                    $newlist[ $key ] = $value[ $field ];
    175171                } else {
    176172                    _doing_it_wrong(
     
    193189        foreach ( $this->output as $value ) {
    194190            if ( is_object( $value ) ) {
    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                     }
     191                if ( isset( $value->$index_key ) ) {
     192                    $newlist[ $value->$index_key ] = $value->$field;
     193                } else {
     194                    $newlist[] = $value->$field;
    201195                }
    202196            } elseif ( is_array( $value ) ) {
    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                     }
     197                if ( isset( $value[ $index_key ] ) ) {
     198                    $newlist[ $value[ $index_key ] ] = $value[ $field ];
     199                } else {
     200                    $newlist[] = $value[ $field ];
    209201                }
    210202            } else {
Note: See TracChangeset for help on using the changeset viewer.