$original Original's field values. * @param array $translation Translation's field values. */ public static function applies( ProductField $field, array $original, array $translation ): bool { if ( ProductField::StockQuantity !== $field ) { return true; } return 'yes' === ( $original['manage_stock'] ?? null ) || 'yes' === ( $translation['manage_stock'] ?? null ); } /** * Whether two raw values are equal for a field. * * Empty and missing are the same; numbers compare by value ("10" = "10.00"); WooCommerce * stores the standard tax class as an empty string, so "standard" equals "". * * @param ProductField $field Field. * @param string|null $original Original value. * @param string|null $translation Translation value. */ public static function equal( ProductField $field, ?string $original, ?string $translation ): bool { $a = self::normalize( $field, $original ); $b = self::normalize( $field, $translation ); if ( in_array( $field, self::NUMERIC_FIELDS, true ) && is_numeric( $a ) && is_numeric( $b ) ) { return abs( (float) $a - (float) $b ) < 0.000001; } return $a === $b; } /** * Display form of a raw value: null when empty. * * @param string|null $value Raw value. */ public static function display( ?string $value ): ?string { return null === $value || '' === $value ? null : $value; } /** * Normalizes a raw value for comparison. * * @param ProductField $field Field. * @param string|null $value Raw value. */ private static function normalize( ProductField $field, ?string $value ): string { $value = null === $value ? '' : trim( $value ); return ProductField::TaxClass === $field && 'standard' === $value ? '' : $value; } }