Dans woocommerce ajax, la méthode d’ajout au panier n’ajoute pas lorsque le panier est vide, si le panier contient quelque chose, ma fonction ajax est ajoutée, mais si le panier est vide, il n’ajoute pas. Et pas d'erreur.
Voici le link . PHP ajouter une fonction panier:
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();
}
Appel 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);
}
});
Je pense que votre fonction php add_to_cart ne crée pas de cookies de panier, vous pouvez le faire manuellement en ajoutant cette ligne dans la condition if avant
//$added
ligne
ajouter cette ligne
do_action( 'woocommerce_set_cart_cookies', TRUE );
cela définira des cookies de panier.