Woocommerceでは、カートが空の場合はajaxでカートに追加されません。カートに何かが含まれている場合はajax関数が追加しますが、カートが空の場合は追加されません。そして間違いありません。
これが link です。 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);
}
});
あなたのphp add_to_cart関数はカートのクッキーを設定していないと思います
//$added
ライン
この行を追加
do_action( 'woocommerce_set_cart_cookies', TRUE );
これはカートのクッキーを設定します。