self::EVENT_TYPE, 'offerId' => $offerId ]; } public static function build(): array { $ids = array(); // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Read-only inspection of WooCommerce add-to-cart requests is used for analytics. $request = wp_unslash($_REQUEST); // phpcs:enable WordPress.Security.NonceVerification.Recommended // Both carry the parent product ID for variations, which is the ID the feed exports. // Classic add-to-cart flow. if (isset($request['add-to-cart'])) { $ids[] = (int) $request['add-to-cart']; } // Some forms/AJAX send product_id. if (isset($request['product_id'])) { $ids[] = (int) $request['product_id']; } // Grouped products: quantity[product_id] => qty. if (!empty($request['quantity']) && is_array($request['quantity'])) { $quantities = array_map('intval', $request['quantity']); foreach ($quantities as $pid => $qty) { $pid = (int) $pid; $qty = (int) $qty; if ($pid > 0 && $qty > 0) { $ids[] = $pid; } } } // Normalize, unique, positive only. $ids = array_values(array_unique(array_filter(array_map('intval', $ids), static function (int $v): bool { return $v > 0; }))); if (empty($ids)) { return []; } $events = []; foreach ($ids as $id) { $events[] = self::getEventBody($id); } $events[] = Uid::buildTag(); return $events; } }