applyDynamicPricing($price, $product); } function sodino_apply_free_shipping_rules($rates) { global $sodino_pricing_service; return $sodino_pricing_service->applyFreeShippingRates($rates); } function sodino_add_dynamic_pricing_cart_item_data($cart_item_data, $product_id, $variation_id, $quantity) { global $sodino_pricing_service; if (!$sodino_pricing_service) { return $cart_item_data; } $product = wc_get_product($variation_id ?: $product_id); if (!$product) { return $cart_item_data; } $basePrice = $product->get_price('edit'); if ($basePrice === '' || !is_numeric($basePrice)) { return $cart_item_data; } $discountedPrice = $sodino_pricing_service->applyDynamicPricing($basePrice, $product); $rules = $sodino_pricing_service->getAppliedRulesForProduct($product); if (empty($rules) || $discountedPrice >= (float) $basePrice) { return $cart_item_data; } $cart_item_data['sodino_dynamic_pricing'] = [ 'rule_ids' => array_values(array_unique(array_map('intval', array_column($rules, 'rule_id')))), 'original_price' => (float) $basePrice, 'discounted_price' => (float) $discountedPrice, 'discount_value' => max(0, (float) $basePrice - (float) $discountedPrice), ]; return $cart_item_data; } function sodino_restore_dynamic_pricing_cart_item_data($cart_item, $values) { if (!empty($values['sodino_dynamic_pricing'])) { $cart_item['sodino_dynamic_pricing'] = $values['sodino_dynamic_pricing']; } return $cart_item; } function sodino_display_dynamic_pricing_cart_item_data($item_data, $cart_item) { if (empty($cart_item['sodino_dynamic_pricing']['discount_value'])) { return $item_data; } $item_data[] = [ 'key' => __('تخفیف سودینو', 'sodino'), 'value' => wp_kses_post(wc_price((float) $cart_item['sodino_dynamic_pricing']['discount_value'])), ]; return $item_data; } function sodino_add_dynamic_pricing_order_item_meta($item, $cart_item_key, $values, $order) { if (empty($values['sodino_dynamic_pricing'])) { return; } $pricing = $values['sodino_dynamic_pricing']; $ruleIds = !empty($pricing['rule_ids']) ? array_map('intval', (array) $pricing['rule_ids']) : []; if (empty($ruleIds)) { return; } $item->add_meta_data('_sodino_rule_ids', implode(',', $ruleIds), true); $item->add_meta_data('_sodino_rule_discount', (float) ($pricing['discount_value'] ?? 0), true); $item->add_meta_data(__('تخفیف قوانین سودینو', 'sodino'), wc_price((float) ($pricing['discount_value'] ?? 0)), true); } function sodino_track_dynamic_pricing_conversion($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) { global $sodino_pricing_service; if (!$sodino_pricing_service) { return; } $product = wc_get_product($variation_id ?: $product_id); if (!$product) { return; } $basePrice = $product->get_price('edit'); if ($basePrice === '' || !is_numeric($basePrice)) { return; } $sodino_pricing_service->applyDynamicPricing($basePrice, $product); $sodino_pricing_service->trackAppliedRulesForProduct($product); }