t) -- * are sorted by key. JSON object keys are semantically unordered, so this * is a no-op for consumers but makes the stored bytes byte-stable across * saves so WordPress's revision meta byte comparison treats reordered * saves as equal. * * @since 6.8.1 * * @param mixed $value Decoded JSON value. * @return mixed */ private static function canonicalize_acf_value( $value ) { if ( ! is_array( $value ) || array() === $value ) { return $value; } $is_sequential = array_keys( $value ) === range( 0, count( $value ) - 1 ); if ( ! $is_sequential ) { ksort( $value ); } foreach ( $value as $k => $v ) { $value[ $k ] = self::canonicalize_acf_value( $v ); } return $value; } }