سلام
کد زیر برای product add-one هست بدون افزونه وقتی کاربر ت صفحه محصول چک باکس را انتخاب میکند قیمت محصول تغییر میکند ولی وقتی به سبد خرید اضافه میکند قیمت محاسبه نمیشه و فقط قیمت محصول نمایش میده ممنون میشم کمک کیند🙏
// Add custom product add-ons to cart item data
function add_custom_product_add_ons_to_cart_item_data($cart_item_data, $product_id, $variation_id) {
$add_ons = [];
$add_ons_total = 0;
if (isset($_POST['product_add_ons_checkboxes'])) {
foreach ($_POST['product_add_ons_checkboxes'] as $add_on) {
$add_ons[] = sanitize_text_field($add_on);
$add_ons_total += floatval($add_on);
}
}
if (!empty($add_ons)) {
$cart_item_data['product_add_ons'] = $add_ons;
$cart_item_data['product_add_ons_total'] = $add_ons_total;
$cart_item_data['unique_key'] = md5(microtime() . rand()); // Ensure unique key for the cart item
}
return $cart_item_data;
}
add_filter('woocommerce_add_cart_item_data', 'add_custom_product_add_ons_to_cart_item_data', 10, 3);
// Display custom product add-ons in cart
function display_custom_product_add_ons_in_cart($item_data, $cart_item) {
if (isset($cart_item['product_add_ons'])) {
foreach ($cart_item['product_add_ons'] as $add_on) {
$item_data[] = [
'name' => 'افزونه',
'value' => number_format($add_on, 0, ',', '.') . ' تومان'
];
}
}
return $item_data;
}
add_filter('woocommerce_get_item_data', 'display_custom_product_add_ons_in_cart', 10, 2);
// Add custom product add-ons to cart item price
function add_custom_product_add_ons_to_cart_item_price($cart_object) {
if (is_admin() && !defined('DOING_AJAX')) return;
if (is_cart() || is_checkout()) {
foreach ($cart_object->get_cart() as $cart_item_key => $cart_item) {
if (isset($cart_item['product_add_ons_total'])) {
$original_price = floatval($cart_item['data']->get_price());
$new_price = $original_price + $cart_item['product_add_ons_total'];
$cart_item['data']->set_price($new_price);
}
}
}
}
add_action('woocommerce_before_calculate_totals', 'add_custom_product_add_ons_to_cart_item_price', 20, 1);
// Shortcode to display product add-ons
function product_add_ons_shortcode() {
global $product;
if (!$product || !$product->is_type('simple')) {
return;
}
// Define the add-ons and their prices in Toman
$add_ons = [
'آیتم 1' => 10000,
'آیتم 2' => 20000,
'آیتم 3' => 30000
];
// Output the add-ons as checkboxes
ob_start();
?>
<div class="product-add-ons">
<?php foreach ($add_ons as $label => $price) : ?>
<label>
<input type="checkbox" name="product_add_ons_checkboxes[]" value="<?php echo esc_attr($price); ?>" class="product-add-on-checkbox" data-price="<?php echo esc_attr($price); ?>">
<?php echo esc_html($label) . ' (' . number_format($price, 0, ',', '.') . ' تومان)'; ?>
</label><br>
<?php endforeach; ?>
</div>
<script>
jQuery(document).ready(function($) {
var base_price = <?php echo $product->get_price(); ?>;
var $price_display = $('p.price span.woocommerce-Price-amount');
$('.product-add-on-checkbox').change(function() {
var additional_price = 0;
$('.product-add-on-checkbox:checked').each(function() {
additional_price += parseFloat($(this).val());
});
var new_price = base_price + additional_price;
$price_display.text(new_price.toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, '.') + ' تومان');
});
});
</script>
<?php
return ob_get_clean();
}
add_shortcode('product_add_ons', 'product_add_ons_shortcode');