get('products', [ 'status' => 'publish', 'per_page' => 100, '_fields' => $productFields ]); $cuw_map = UpsellService::buildProductMap(); $enriched = []; foreach ($products as $product) { // Get variations for variable products (only needed fields) $variation_details = []; if ($product->type === 'variable') { $variation_details = (array) $woocommerce->get( "products/{$product->id}/variations", [ 'per_page' => 50, '_fields' => $variationFields ] ); } // Combine upsell + cross-sell + CUW IDs $upsell_ids = !empty($product->upsell_ids) ? array_map('intval', (array) $product->upsell_ids) : []; $cross_sell_ids = !empty($product->cross_sell_ids) ? array_map('intval', (array) $product->cross_sell_ids) : []; $cuw_ids = $cuw_map[(int)$product->id] ?? []; $recommended_ids = array_values(array_unique(array_filter(array_merge( $upsell_ids, $cross_sell_ids, $cuw_ids )))); // Build minimal product object with only needed fields $enriched[] = [ 'id' => (int) $product->id, 'name' => $product->name, 'price' => $product->price, 'type' => $product->type, 'upsell_ids' => $upsell_ids, 'cross_sell_ids' => $cross_sell_ids, 'variation_details' => $variation_details, 'cuw_ids' => $cuw_ids, 'recommended_ids' => $recommended_ids ]; } echo json_encode($enriched); } catch (Exception $e) { echo json_encode([]); } }