Не работает добавление товара в корзину через Ajax в WooCommerce
1 дек. 2015 г., 07:22:13
Просмотры: 14.4K
Голосов: 1
В WooCommerce метод ajax добавления в корзину не работает, когда корзина пуста. Если в корзине уже есть товары, то мой ajax-запрос срабатывает, но с пустой корзиной не добавляет. И никаких ошибок.
Вот ссылка. PHP функция добавления в корзину:
function add_custom_product_meta() {
global $woocommerce, $wpdb;
$item_id = isset($_POST['item_id']) ? apply_filters( 'woocommerce_add_to_cart_product_id', absint( $_POST['item_id'] ) ) : FALSE;
$quantity = empty( $_POST['quantity'] ) ? 1 : wc_stock_amount( $_POST['quantity'] );
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $item_id, $quantity );
$product_status = get_post_status( $item_id );
$variation_id = isset($_POST['variation_id']) ? $_POST['variation_id'] : 0;
$atributes = isset($_POST['atributes']) ? $_POST['atributes'] : 'Small';
$attribute_pa_macaroons = isset($_POST['attribute_pa_macaroons']) ? $_POST['attribute_pa_macaroons'] : FALSE;
if($attribute_pa_macaroons && $passed_validation && $woocommerce->cart->add_to_cart( $item_id, $quantity, $variation_id, array( 'attribute_size' => $atributes, "macaroons" => $attribute_pa_macaroons))){
//$added = $woocommerce->cart->add_to_cart( $item_id, $quantity, $variation_id, array( 'attribute_size' => $atributes, "macaroons" => $attribute_pa_macaroons));
do_action( 'woocommerce_ajax_added_to_cart', $item_id );
if ( get_option( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) {
wc_add_to_cart_message( $item_id );
}
WC_AJAX::get_refreshed_fragments();
echo json_encode(array(
'atributes' => $atributes,
'macaroons' => $attribute_pa_macaroons,
'product_added' => TRUE,
'ajax_complete' => TRUE,
'posted' => isset($_POST['item_id']) ? $woocommerce->cart : 'item_id is empty'
));
wp_die();
}
echo json_encode(array(
'product_id' => FALSE,
'product_added' => FALSE,
'ajax_complete' => TRUE,
'posted' => $attribute_pa_macaroons
));
wp_die();
}
JavaScript Ajax запрос:
$.ajax({
type : 'post',
dataType : 'json',
url : woocommerce_params.ajax_url,
data : {
'action' : 'elephas_addtocart_box',
'item_id' : itemID,
'quantity' : quantity,
'variation_id' : variathionID,
'atributes' : atributes,
'attribute_pa_macaroons' : itemData
}
})
.done(function(response){
if(response.ajax_complete){
document.location.reload(true);
}
})
.error(function(error){
console.log(error);
})
.always(function(response){
if(response.ajax_complete){
document.location.reload(true);
}
});

Mohamed Rihan
190
Комментарии
Показать остальные 2 комментариев
Все ответы на вопрос
1
2
Я думаю, ваша функция php add_to_cart не устанавливает куки корзины, вы можете сделать это вручную, добавив эту строку внутри условия if перед строкой
//$added
добавьте эту строку
do_action( 'woocommerce_set_cart_cookies', TRUE );
это установит куки корзины.

Kamaal ABOOTHALIB
453
1 дек. 2015 г. 09:12:16
Похожие вопросы