Woocommerce Adăugare în coș Ajax nu funcționează
1 dec. 2015, 07:22:13
Vizualizări: 14.4K
Voturi: 1
În WooCommerce, metoda Ajax pentru adăugarea în coș nu funcționează când coșul este gol. Dacă coșul conține deja ceva, funcția mea Ajax adaugă produsul, dar dacă coșul este gol, nu se adaugă. Și nu apare nicio eroare.
Aici este linkul. Funcția PHP pentru adăugare în coș:
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'] : 'Mic';
$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 este gol'
));
wp_die();
}
echo json_encode(array(
'product_id' => FALSE,
'product_added' => FALSE,
'ajax_complete' => TRUE,
'posted' => $attribute_pa_macaroons
));
wp_die();
}
Apelul Ajax Javascript:
$.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
Comentarii
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare
1
2
Cred că funcția ta PHP add_to_cart nu setează cookie-urile coșului, poți face asta manual adăugând această linie în interiorul condiției if înainte de
//$added
linia
adaugă această linie
do_action( 'woocommerce_set_cart_cookies', TRUE );
aceasta va seta cookie-urile coșului.

Kamaal ABOOTHALIB
453
1 dec. 2015 09:12:16
Întrebări similare
3
răspunsuri
2
răspunsuri
1
răspunsuri