mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-07-04 01:00:04 +00:00
General: Compare values as strings in WP_List_Util::filter() and ::sort_callback().
This aims to preserve backward compatibility for code relying on type juggling when using the `wp_list_filter()` function, e.g. comparing a numeric string to an integer. Follow-up to [55908]. Props azaozz, jeremyfelt, david.binda. See #57839. git-svn-id: https://develop.svn.wordpress.org/trunk@56137 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -116,12 +116,16 @@ class WP_List_Util {
|
||||
foreach ( $args as $m_key => $m_value ) {
|
||||
if ( is_array( $obj ) ) {
|
||||
// Treat object as an array.
|
||||
if ( array_key_exists( $m_key, $obj ) && ( $m_value === $obj[ $m_key ] ) ) {
|
||||
if ( array_key_exists( $m_key, $obj )
|
||||
&& ( (string) $m_value === (string) $obj[ $m_key ] )
|
||||
) {
|
||||
$matched++;
|
||||
}
|
||||
} elseif ( is_object( $obj ) ) {
|
||||
// Treat object as an object.
|
||||
if ( isset( $obj->{$m_key} ) && ( $m_value === $obj->{$m_key} ) ) {
|
||||
if ( isset( $obj->{$m_key} )
|
||||
&& ( (string) $m_value === (string) $obj->{$m_key} )
|
||||
) {
|
||||
$matched++;
|
||||
}
|
||||
}
|
||||
@@ -276,7 +280,7 @@ class WP_List_Util {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( $a[ $field ] === $b[ $field ] ) {
|
||||
if ( (string) $a[ $field ] === (string) $b[ $field ] ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -210,6 +210,20 @@ class Tests_Functions_wpListFilter extends WP_UnitTestCase {
|
||||
),
|
||||
),
|
||||
),
|
||||
'string to int comparison' => array(
|
||||
array(
|
||||
(object) array(
|
||||
'foo' => '1',
|
||||
),
|
||||
),
|
||||
array( 'foo' => 1 ),
|
||||
'AND',
|
||||
array(
|
||||
0 => (object) array(
|
||||
'foo' => '1',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user