I create a custom wordpress plugin for add to card from users
enter image description here
this is my output i want to display my selected attribute in cart items but does not found variation_id if anyone know about this please help me to solve this issue
<code> public function cadc_add_products_to_cart()
{
// function my_update_cookie($logged_in_cookie)
// {
// $_COOKIE[LOGGED_IN_COOKIE] = $logged_in_cookie;
// }
// add_action('set_logged_in_cookie', 'my_update_cookie');
// check_ajax_referer('cadc_add_to_cart_nonce', 'nonce');
if (!is_user_logged_in()) {
wp_send_json_error('You must be logged in to add products to the cart.');
}
$user_id = intval($_POST['user_id']);
$products = $_POST['products'];
if (!is_array($products)) {
wp_send_json_error('Invalid products data.');
}
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
if (!WC()->session->has_session()) {
WC()->session->set_customer_session_cookie(true);
}
$variations_data = array();
foreach ($products as $product) {
$product_id = intval($product['product_id']);
$quantity = intval($product['quantity']);
$variation_attributes = isset($product['attributes']) ? $product['attributes'] : array();
$wc_product = wc_get_product($product_id);
if ('variable' === $wc_product->get_type()) {
$selected_attributes = array();
foreach ($variation_attributes as $attribute_name => $attribute_value) {
$taxonomy = str_replace('attribute_', '', $attribute_name);
$selected_attributes[$taxonomy] = $attribute_value;
}
echo '<pre>Selected Attributes for Product ID ' . $product_id . ': ';
print_r($selected_attributes);
echo '</pre>';
$variation_id = $this->get_matching_variation_id($wc_product, $selected_attributes);
if ($variation_id) {
$cart_item_key = WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $selected_attributes);
if (!$cart_item_key) {
wp_send_json_error('Failed to add variable product to cart. Product ID: ' . $product_id . ', Variation ID: ' . $variation_id);
} else {
echo '<pre>Added to cart successfully: ' . $cart_item_key . '</pre>';
}
}
} else {
$cart_item_key = WC()->cart->add_to_cart($product_id, $quantity);
if (!$cart_item_key) {
wp_send_json_error('Failed to add product to cart.');
}
}
}
$cart_items = $this->get_cart_items_for_user($user_id);
wp_send_json_success(array(
'cart_items' => $cart_items,
'variations' => $variations_data,
));
// echo '<pre>';print_r($variations_data);echo'</pre>';die;
}
public function get_matching_variation_id($product, $attributes) {
foreach ($product->get_available_variations() as $variation) {
$match = true;
foreach ($attributes as $taxonomy => $term_slug) {
$variation_attr_key = 'attribute_' . $taxonomy;
// Ensure the attribute key exists in the variation
if (!isset($variation['attributes'][$variation_attr_key]) || $variation['attributes'][$variation_attr_key] != $term_slug) {
$match = false;
break;
}
}
if ($match) {
return $variation['variation_id'];
}
}
return 0; // No matching variation found
}
function cadc_get_product_variations() {
// check_ajax_referer('cadc_add_to_cart_nonce', 'nonce');
$product_id = intval($_POST['product_id']);
$wc_product = wc_get_product($product_id);
if (!$wc_product) {
wp_send_json_error('Invalid product.');
}
$is_variable = $wc_product->is_type('variable');
if (!$is_variable) {
wp_send_json_success(['is_variable' => false]);
}
$variations = [];
$attributes = $wc_product->get_variation_attributes();
foreach ($attributes as $taxonomy => $options) {
$terms = array();
foreach ($options as $option) {
$term = get_term_by('slug', $option, $taxonomy);
if ($term) {
$terms[] = $term->name;
}
}
$variations[$taxonomy] = array(
'label' => wc_attribute_label($taxonomy),
'options' => array_map('esc_html', $terms),
);
}
wp_send_json_success([
'is_variable' => true,
'variations' => $variations
]);
}
private function get_cart_items_for_user($user_id)
{
wp_set_current_user($user_id);
$cart_items = WC()->cart->get_cart();
$response = array();
foreach ($cart_items as $cart_item_key => $cart_item) {
$_product = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key);
$item_data = array(
'product_id' => $_product->get_id(),
'product_name' => $_product->get_name(),
'quantity' => $cart_item['quantity'],
);
if ($_product->is_type('variation')) {
$variation_attributes = wc_get_formatted_variation($_product, true);
$item_data['variations'] = $variation_attributes;
}
$response[] = $item_data;
}
return $response;
}
</code>
<code> public function cadc_add_products_to_cart()
{
// function my_update_cookie($logged_in_cookie)
// {
// $_COOKIE[LOGGED_IN_COOKIE] = $logged_in_cookie;
// }
// add_action('set_logged_in_cookie', 'my_update_cookie');
// check_ajax_referer('cadc_add_to_cart_nonce', 'nonce');
if (!is_user_logged_in()) {
wp_send_json_error('You must be logged in to add products to the cart.');
}
$user_id = intval($_POST['user_id']);
$products = $_POST['products'];
if (!is_array($products)) {
wp_send_json_error('Invalid products data.');
}
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
if (!WC()->session->has_session()) {
WC()->session->set_customer_session_cookie(true);
}
$variations_data = array();
foreach ($products as $product) {
$product_id = intval($product['product_id']);
$quantity = intval($product['quantity']);
$variation_attributes = isset($product['attributes']) ? $product['attributes'] : array();
$wc_product = wc_get_product($product_id);
if ('variable' === $wc_product->get_type()) {
$selected_attributes = array();
foreach ($variation_attributes as $attribute_name => $attribute_value) {
$taxonomy = str_replace('attribute_', '', $attribute_name);
$selected_attributes[$taxonomy] = $attribute_value;
}
echo '<pre>Selected Attributes for Product ID ' . $product_id . ': ';
print_r($selected_attributes);
echo '</pre>';
$variation_id = $this->get_matching_variation_id($wc_product, $selected_attributes);
if ($variation_id) {
$cart_item_key = WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $selected_attributes);
if (!$cart_item_key) {
wp_send_json_error('Failed to add variable product to cart. Product ID: ' . $product_id . ', Variation ID: ' . $variation_id);
} else {
echo '<pre>Added to cart successfully: ' . $cart_item_key . '</pre>';
}
}
} else {
$cart_item_key = WC()->cart->add_to_cart($product_id, $quantity);
if (!$cart_item_key) {
wp_send_json_error('Failed to add product to cart.');
}
}
}
$cart_items = $this->get_cart_items_for_user($user_id);
wp_send_json_success(array(
'cart_items' => $cart_items,
'variations' => $variations_data,
));
// echo '<pre>';print_r($variations_data);echo'</pre>';die;
}
public function get_matching_variation_id($product, $attributes) {
foreach ($product->get_available_variations() as $variation) {
$match = true;
foreach ($attributes as $taxonomy => $term_slug) {
$variation_attr_key = 'attribute_' . $taxonomy;
// Ensure the attribute key exists in the variation
if (!isset($variation['attributes'][$variation_attr_key]) || $variation['attributes'][$variation_attr_key] != $term_slug) {
$match = false;
break;
}
}
if ($match) {
return $variation['variation_id'];
}
}
return 0; // No matching variation found
}
function cadc_get_product_variations() {
// check_ajax_referer('cadc_add_to_cart_nonce', 'nonce');
$product_id = intval($_POST['product_id']);
$wc_product = wc_get_product($product_id);
if (!$wc_product) {
wp_send_json_error('Invalid product.');
}
$is_variable = $wc_product->is_type('variable');
if (!$is_variable) {
wp_send_json_success(['is_variable' => false]);
}
$variations = [];
$attributes = $wc_product->get_variation_attributes();
foreach ($attributes as $taxonomy => $options) {
$terms = array();
foreach ($options as $option) {
$term = get_term_by('slug', $option, $taxonomy);
if ($term) {
$terms[] = $term->name;
}
}
$variations[$taxonomy] = array(
'label' => wc_attribute_label($taxonomy),
'options' => array_map('esc_html', $terms),
);
}
wp_send_json_success([
'is_variable' => true,
'variations' => $variations
]);
}
private function get_cart_items_for_user($user_id)
{
wp_set_current_user($user_id);
$cart_items = WC()->cart->get_cart();
$response = array();
foreach ($cart_items as $cart_item_key => $cart_item) {
$_product = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key);
$item_data = array(
'product_id' => $_product->get_id(),
'product_name' => $_product->get_name(),
'quantity' => $cart_item['quantity'],
);
if ($_product->is_type('variation')) {
$variation_attributes = wc_get_formatted_variation($_product, true);
$item_data['variations'] = $variation_attributes;
}
$response[] = $item_data;
}
return $response;
}
</code>
public function cadc_add_products_to_cart()
{
// function my_update_cookie($logged_in_cookie)
// {
// $_COOKIE[LOGGED_IN_COOKIE] = $logged_in_cookie;
// }
// add_action('set_logged_in_cookie', 'my_update_cookie');
// check_ajax_referer('cadc_add_to_cart_nonce', 'nonce');
if (!is_user_logged_in()) {
wp_send_json_error('You must be logged in to add products to the cart.');
}
$user_id = intval($_POST['user_id']);
$products = $_POST['products'];
if (!is_array($products)) {
wp_send_json_error('Invalid products data.');
}
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
if (!WC()->session->has_session()) {
WC()->session->set_customer_session_cookie(true);
}
$variations_data = array();
foreach ($products as $product) {
$product_id = intval($product['product_id']);
$quantity = intval($product['quantity']);
$variation_attributes = isset($product['attributes']) ? $product['attributes'] : array();
$wc_product = wc_get_product($product_id);
if ('variable' === $wc_product->get_type()) {
$selected_attributes = array();
foreach ($variation_attributes as $attribute_name => $attribute_value) {
$taxonomy = str_replace('attribute_', '', $attribute_name);
$selected_attributes[$taxonomy] = $attribute_value;
}
echo '<pre>Selected Attributes for Product ID ' . $product_id . ': ';
print_r($selected_attributes);
echo '</pre>';
$variation_id = $this->get_matching_variation_id($wc_product, $selected_attributes);
if ($variation_id) {
$cart_item_key = WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $selected_attributes);
if (!$cart_item_key) {
wp_send_json_error('Failed to add variable product to cart. Product ID: ' . $product_id . ', Variation ID: ' . $variation_id);
} else {
echo '<pre>Added to cart successfully: ' . $cart_item_key . '</pre>';
}
}
} else {
$cart_item_key = WC()->cart->add_to_cart($product_id, $quantity);
if (!$cart_item_key) {
wp_send_json_error('Failed to add product to cart.');
}
}
}
$cart_items = $this->get_cart_items_for_user($user_id);
wp_send_json_success(array(
'cart_items' => $cart_items,
'variations' => $variations_data,
));
// echo '<pre>';print_r($variations_data);echo'</pre>';die;
}
public function get_matching_variation_id($product, $attributes) {
foreach ($product->get_available_variations() as $variation) {
$match = true;
foreach ($attributes as $taxonomy => $term_slug) {
$variation_attr_key = 'attribute_' . $taxonomy;
// Ensure the attribute key exists in the variation
if (!isset($variation['attributes'][$variation_attr_key]) || $variation['attributes'][$variation_attr_key] != $term_slug) {
$match = false;
break;
}
}
if ($match) {
return $variation['variation_id'];
}
}
return 0; // No matching variation found
}
function cadc_get_product_variations() {
// check_ajax_referer('cadc_add_to_cart_nonce', 'nonce');
$product_id = intval($_POST['product_id']);
$wc_product = wc_get_product($product_id);
if (!$wc_product) {
wp_send_json_error('Invalid product.');
}
$is_variable = $wc_product->is_type('variable');
if (!$is_variable) {
wp_send_json_success(['is_variable' => false]);
}
$variations = [];
$attributes = $wc_product->get_variation_attributes();
foreach ($attributes as $taxonomy => $options) {
$terms = array();
foreach ($options as $option) {
$term = get_term_by('slug', $option, $taxonomy);
if ($term) {
$terms[] = $term->name;
}
}
$variations[$taxonomy] = array(
'label' => wc_attribute_label($taxonomy),
'options' => array_map('esc_html', $terms),
);
}
wp_send_json_success([
'is_variable' => true,
'variations' => $variations
]);
}
private function get_cart_items_for_user($user_id)
{
wp_set_current_user($user_id);
$cart_items = WC()->cart->get_cart();
$response = array();
foreach ($cart_items as $cart_item_key => $cart_item) {
$_product = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key);
$item_data = array(
'product_id' => $_product->get_id(),
'product_name' => $_product->get_name(),
'quantity' => $cart_item['quantity'],
);
if ($_product->is_type('variation')) {
$variation_attributes = wc_get_formatted_variation($_product, true);
$item_data['variations'] = $variation_attributes;
}
$response[] = $item_data;
}
return $response;
}
<code>(function ($) {
'use strict';
$(document).ready(function () {
function updateCartDisplay(cartItems) {
var cartList = $('#cadc-cart-list');
cartList.empty();
$.each(cartItems, function (index, item) {
var listItem = $('<li>').addClass('woocommerce-mini-cart-item mini_cart_item');
var productText = item.product_name + ' x ' + item.quantity;
// Check if variations exist and are correctly formatted
if (item.variations && typeof item.variations === 'object') {
var variationsText = Object.entries(item.variations).map(function ([key, value]) {
// Ensure key and value are strings and properly format them
return key + ': ' + value;
}).join(', ');
productText += ' (' + variationsText + ')';
}
listItem.text(productText);
listItem.append('<button type="button" class="cadc-remove-add-to-cart-product" data-product-id="' + item.product_id + '">Remove</button>');
cartList.append(listItem);
});
}
function updateProductAttributes(attributes, $container) {
var attributeContainer = $container;
attributeContainer.empty();
$.each(attributes, function (attributeKey, attribute) {
var label = attribute.label;
var options = attribute.options;
// Create label element
attributeContainer.append('<label>' + label + '</label>');
// Create select element
var select = $('<select>').attr('name', 'attribute_' + attributeKey);
// Add options to select
$.each(options, function (index, option) {
select.append($('<option>').attr('value', option).text(option));
});
// Append select to container
attributeContainer.append(select);
});
}
$(document).on('change', 'select[name="product_id[]"]', function () {
var $row = $(this).closest('.cadc-product-row');
var productId = $(this).val();
var $attributesContainer = $row.find('.product-attributes-container');
if (productId) {
$.post(cadc_params.ajaxurl, {
action: 'cadc_get_product_variations',
nonce: cadc_params.nonce,
product_id: productId
}, function (response) {
if (response.success) {
if (response.data.is_variable) {
updateProductAttributes(response.data.variations, $attributesContainer);
} else {
$attributesContainer.empty();
}
} else {
alert('Failed to load product variations.');
}
});
}
});
function loadCartItems() {
$.post(cadc_params.ajaxurl, {
action: 'cadc_get_cart_items',
nonce: cadc_params.nonce,
user_id: $('#cadc_user_id').val()
}, function (response) {
if (response.success) {
updateCartDisplay(response.data.cart_items);
} else {
alert('Failed to load cart items.');
}
});
}
$('#cadc-submit').on('click', function () {
var valid = false;
var data = {
action: 'cadc_add_products_to_cart',
nonce: cadc_params.nonce,
user_id: $('#cadc_user_id').val(),
products: []
};
$('.cadc-product-row').each(function () {
var product_id = $(this).find('select[name="product_id[]"]').val();
var quantity = $(this).find('input[name="quantity[]"]').val();
var attributes = {};
$(this).find('select[name^="attribute_"]').each(function () {
attributes[$(this).attr('name')] = $(this).val();
});
if (product_id) {
valid = true;
data.products.push({ product_id: product_id, quantity: quantity, attributes: attributes });
}
});
if (!valid) {
alert('Please select at least one product.');
return;
}
$.post(cadc_params.ajaxurl, data, function (response) {
if (response.success) {
updateCartDisplay(response.data.cart_items);
} else {
alert('Sorry, an error occurred.');
}
});
});
$(document).on('click', '.cadc-remove-add-to-cart-product', function () {
var productId = $(this).data('product-id');
var userId = $('#cadc_user_id').val();
$.post(cadc_params.ajaxurl, {
action: 'cadc_remove_cart_item',
nonce: cadc_params.nonce,
user_id: userId,
product_id: productId
}, function (response) {
if (response.success) {
loadCartItems();
} else {
alert('Failed to remove item from cart.');
}
});
});
function updateRemoveButtonVisibility() {
var rows = $('.cadc-product-row');
if (rows.length > 1) {
rows.find('.cadc-remove').show();
} else {
rows.find('.cadc-remove').hide();
}
}
$(document).on('click', '.cadc-add-more', function () {
var newRow = $(this).closest('.cadc-product-row').clone();
newRow.find('select[name="product_id[]"]').val('');
newRow.find('input[name="quantity[]"]').val(1);
newRow.find('.product-attributes-container').empty(); // Clear the attributes for the new row
$('#cadc-products-container').append(newRow);
updateRemoveButtonVisibility();
});
$(document).on('click', '.cadc-remove', function () {
if ($('.cadc-product-row').length > 1) {
$(this).closest('.cadc-product-row').remove();
updateRemoveButtonVisibility();
}
});
$(document).on('click', '.cadc-increment', function () {
var quantityInput = $(this).siblings('input[name="quantity[]"]');
var currentVal = parseInt(quantityInput.val());
quantityInput.val(currentVal + 1);
});
$(document).on('click', '.cadc-decrement', function () {
var quantityInput = $(this).siblings('input[name="quantity[]"]');
var currentVal = parseInt(quantityInput.val());
if (currentVal > 1) {
quantityInput.val(currentVal - 1);
}
});
loadCartItems();
});
})(jQuery);
</code>
<code>(function ($) {
'use strict';
$(document).ready(function () {
function updateCartDisplay(cartItems) {
var cartList = $('#cadc-cart-list');
cartList.empty();
$.each(cartItems, function (index, item) {
var listItem = $('<li>').addClass('woocommerce-mini-cart-item mini_cart_item');
var productText = item.product_name + ' x ' + item.quantity;
// Check if variations exist and are correctly formatted
if (item.variations && typeof item.variations === 'object') {
var variationsText = Object.entries(item.variations).map(function ([key, value]) {
// Ensure key and value are strings and properly format them
return key + ': ' + value;
}).join(', ');
productText += ' (' + variationsText + ')';
}
listItem.text(productText);
listItem.append('<button type="button" class="cadc-remove-add-to-cart-product" data-product-id="' + item.product_id + '">Remove</button>');
cartList.append(listItem);
});
}
function updateProductAttributes(attributes, $container) {
var attributeContainer = $container;
attributeContainer.empty();
$.each(attributes, function (attributeKey, attribute) {
var label = attribute.label;
var options = attribute.options;
// Create label element
attributeContainer.append('<label>' + label + '</label>');
// Create select element
var select = $('<select>').attr('name', 'attribute_' + attributeKey);
// Add options to select
$.each(options, function (index, option) {
select.append($('<option>').attr('value', option).text(option));
});
// Append select to container
attributeContainer.append(select);
});
}
$(document).on('change', 'select[name="product_id[]"]', function () {
var $row = $(this).closest('.cadc-product-row');
var productId = $(this).val();
var $attributesContainer = $row.find('.product-attributes-container');
if (productId) {
$.post(cadc_params.ajaxurl, {
action: 'cadc_get_product_variations',
nonce: cadc_params.nonce,
product_id: productId
}, function (response) {
if (response.success) {
if (response.data.is_variable) {
updateProductAttributes(response.data.variations, $attributesContainer);
} else {
$attributesContainer.empty();
}
} else {
alert('Failed to load product variations.');
}
});
}
});
function loadCartItems() {
$.post(cadc_params.ajaxurl, {
action: 'cadc_get_cart_items',
nonce: cadc_params.nonce,
user_id: $('#cadc_user_id').val()
}, function (response) {
if (response.success) {
updateCartDisplay(response.data.cart_items);
} else {
alert('Failed to load cart items.');
}
});
}
$('#cadc-submit').on('click', function () {
var valid = false;
var data = {
action: 'cadc_add_products_to_cart',
nonce: cadc_params.nonce,
user_id: $('#cadc_user_id').val(),
products: []
};
$('.cadc-product-row').each(function () {
var product_id = $(this).find('select[name="product_id[]"]').val();
var quantity = $(this).find('input[name="quantity[]"]').val();
var attributes = {};
$(this).find('select[name^="attribute_"]').each(function () {
attributes[$(this).attr('name')] = $(this).val();
});
if (product_id) {
valid = true;
data.products.push({ product_id: product_id, quantity: quantity, attributes: attributes });
}
});
if (!valid) {
alert('Please select at least one product.');
return;
}
$.post(cadc_params.ajaxurl, data, function (response) {
if (response.success) {
updateCartDisplay(response.data.cart_items);
} else {
alert('Sorry, an error occurred.');
}
});
});
$(document).on('click', '.cadc-remove-add-to-cart-product', function () {
var productId = $(this).data('product-id');
var userId = $('#cadc_user_id').val();
$.post(cadc_params.ajaxurl, {
action: 'cadc_remove_cart_item',
nonce: cadc_params.nonce,
user_id: userId,
product_id: productId
}, function (response) {
if (response.success) {
loadCartItems();
} else {
alert('Failed to remove item from cart.');
}
});
});
function updateRemoveButtonVisibility() {
var rows = $('.cadc-product-row');
if (rows.length > 1) {
rows.find('.cadc-remove').show();
} else {
rows.find('.cadc-remove').hide();
}
}
$(document).on('click', '.cadc-add-more', function () {
var newRow = $(this).closest('.cadc-product-row').clone();
newRow.find('select[name="product_id[]"]').val('');
newRow.find('input[name="quantity[]"]').val(1);
newRow.find('.product-attributes-container').empty(); // Clear the attributes for the new row
$('#cadc-products-container').append(newRow);
updateRemoveButtonVisibility();
});
$(document).on('click', '.cadc-remove', function () {
if ($('.cadc-product-row').length > 1) {
$(this).closest('.cadc-product-row').remove();
updateRemoveButtonVisibility();
}
});
$(document).on('click', '.cadc-increment', function () {
var quantityInput = $(this).siblings('input[name="quantity[]"]');
var currentVal = parseInt(quantityInput.val());
quantityInput.val(currentVal + 1);
});
$(document).on('click', '.cadc-decrement', function () {
var quantityInput = $(this).siblings('input[name="quantity[]"]');
var currentVal = parseInt(quantityInput.val());
if (currentVal > 1) {
quantityInput.val(currentVal - 1);
}
});
loadCartItems();
});
})(jQuery);
</code>
(function ($) {
'use strict';
$(document).ready(function () {
function updateCartDisplay(cartItems) {
var cartList = $('#cadc-cart-list');
cartList.empty();
$.each(cartItems, function (index, item) {
var listItem = $('<li>').addClass('woocommerce-mini-cart-item mini_cart_item');
var productText = item.product_name + ' x ' + item.quantity;
// Check if variations exist and are correctly formatted
if (item.variations && typeof item.variations === 'object') {
var variationsText = Object.entries(item.variations).map(function ([key, value]) {
// Ensure key and value are strings and properly format them
return key + ': ' + value;
}).join(', ');
productText += ' (' + variationsText + ')';
}
listItem.text(productText);
listItem.append('<button type="button" class="cadc-remove-add-to-cart-product" data-product-id="' + item.product_id + '">Remove</button>');
cartList.append(listItem);
});
}
function updateProductAttributes(attributes, $container) {
var attributeContainer = $container;
attributeContainer.empty();
$.each(attributes, function (attributeKey, attribute) {
var label = attribute.label;
var options = attribute.options;
// Create label element
attributeContainer.append('<label>' + label + '</label>');
// Create select element
var select = $('<select>').attr('name', 'attribute_' + attributeKey);
// Add options to select
$.each(options, function (index, option) {
select.append($('<option>').attr('value', option).text(option));
});
// Append select to container
attributeContainer.append(select);
});
}
$(document).on('change', 'select[name="product_id[]"]', function () {
var $row = $(this).closest('.cadc-product-row');
var productId = $(this).val();
var $attributesContainer = $row.find('.product-attributes-container');
if (productId) {
$.post(cadc_params.ajaxurl, {
action: 'cadc_get_product_variations',
nonce: cadc_params.nonce,
product_id: productId
}, function (response) {
if (response.success) {
if (response.data.is_variable) {
updateProductAttributes(response.data.variations, $attributesContainer);
} else {
$attributesContainer.empty();
}
} else {
alert('Failed to load product variations.');
}
});
}
});
function loadCartItems() {
$.post(cadc_params.ajaxurl, {
action: 'cadc_get_cart_items',
nonce: cadc_params.nonce,
user_id: $('#cadc_user_id').val()
}, function (response) {
if (response.success) {
updateCartDisplay(response.data.cart_items);
} else {
alert('Failed to load cart items.');
}
});
}
$('#cadc-submit').on('click', function () {
var valid = false;
var data = {
action: 'cadc_add_products_to_cart',
nonce: cadc_params.nonce,
user_id: $('#cadc_user_id').val(),
products: []
};
$('.cadc-product-row').each(function () {
var product_id = $(this).find('select[name="product_id[]"]').val();
var quantity = $(this).find('input[name="quantity[]"]').val();
var attributes = {};
$(this).find('select[name^="attribute_"]').each(function () {
attributes[$(this).attr('name')] = $(this).val();
});
if (product_id) {
valid = true;
data.products.push({ product_id: product_id, quantity: quantity, attributes: attributes });
}
});
if (!valid) {
alert('Please select at least one product.');
return;
}
$.post(cadc_params.ajaxurl, data, function (response) {
if (response.success) {
updateCartDisplay(response.data.cart_items);
} else {
alert('Sorry, an error occurred.');
}
});
});
$(document).on('click', '.cadc-remove-add-to-cart-product', function () {
var productId = $(this).data('product-id');
var userId = $('#cadc_user_id').val();
$.post(cadc_params.ajaxurl, {
action: 'cadc_remove_cart_item',
nonce: cadc_params.nonce,
user_id: userId,
product_id: productId
}, function (response) {
if (response.success) {
loadCartItems();
} else {
alert('Failed to remove item from cart.');
}
});
});
function updateRemoveButtonVisibility() {
var rows = $('.cadc-product-row');
if (rows.length > 1) {
rows.find('.cadc-remove').show();
} else {
rows.find('.cadc-remove').hide();
}
}
$(document).on('click', '.cadc-add-more', function () {
var newRow = $(this).closest('.cadc-product-row').clone();
newRow.find('select[name="product_id[]"]').val('');
newRow.find('input[name="quantity[]"]').val(1);
newRow.find('.product-attributes-container').empty(); // Clear the attributes for the new row
$('#cadc-products-container').append(newRow);
updateRemoveButtonVisibility();
});
$(document).on('click', '.cadc-remove', function () {
if ($('.cadc-product-row').length > 1) {
$(this).closest('.cadc-product-row').remove();
updateRemoveButtonVisibility();
}
});
$(document).on('click', '.cadc-increment', function () {
var quantityInput = $(this).siblings('input[name="quantity[]"]');
var currentVal = parseInt(quantityInput.val());
quantityInput.val(currentVal + 1);
});
$(document).on('click', '.cadc-decrement', function () {
var quantityInput = $(this).siblings('input[name="quantity[]"]');
var currentVal = parseInt(quantityInput.val());
if (currentVal > 1) {
quantityInput.val(currentVal - 1);
}
});
loadCartItems();
});
})(jQuery);
this is my js and php code i don’t know about get_matching_variation_id see here to how i solve my issue
<code></code>
<code></code>
New contributor
Manny is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.