Woocommerce Ajax Añadir al carrito no funciona

1 dic 2015, 07:22:13
Vistas: 14.4K
Votos: 1

En WooCommerce el método Ajax para añadir al carrito no funciona cuando el carrito está vacío, si el carrito contiene algo entonces mi función Ajax añade pero si el carrito está vacío no añade. Y no hay error.

Aquí está el enlace. Función PHP para añadir al carrito:

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();
}

Llamada Ajax en 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);
                        }
                    });
7
Comentarios

Tu enlace es local.

tao tao
1 dic 2015 07:27:46

lo siento :) http://izi-dev.fr/forreygalland/product/macaroons/

Mohamed Rihan Mohamed Rihan
1 dic 2015 07:28:49

Supongo que necesitas agregar suficientes "Macaroons" hasta llenar la caja (8|16|32) para desbloquear el botón Añadir al carrito. También supongo que no estás muy familiarizado con el sitio web todavía? ¡El "error" más divertido del día, por mucho!

tao tao
1 dic 2015 07:34:33

No se trata de llenar la caja, por favor intenta con el carrito vacío y borra todas las cookies de tu navegador. Entonces será difícil agregar macarons como producto, pero otros productos se pueden agregar fácilmente.

Mohamed Rihan Mohamed Rihan
1 dic 2015 07:40:56

Estás en una página de producto personalizable. No puedes comprar una caja vacía de macarons. Debes especificar qué macarons deseas dentro. Selecciona la caja "Pequeña", presiona el botón + de cualquier macaron hasta que la caja esté llena y podrás realizar el pedido. El script responsable de esto está en plugins/woocommerce/assets/js/frontend. Desafortunadamente, todos están minificados.

tao tao
1 dic 2015 07:49:33

Por favor borra las cookies de ese sitio web e intenta agregar la caja de macarons a tu carrito. Para tu información, sé que tienes que llenar la caja con macarons para activar el botón y esa no es la pregunta. La pregunta es por qué no se agrega el producto al carrito de compras cuando el carrito está vacío.

Mohamed Rihan Mohamed Rihan
1 dic 2015 08:05:01

No puedo reproducir tu error. Funciona perfectamente para mí.

tao tao
1 dic 2015 08:41:13
Mostrar los 2 comentarios restantes
Todas las respuestas a la pregunta 1
2

Creo que tu función php add_to_cart no está configurando las cookies del carrito, puedes hacer esto manualmente agregando esta línea dentro de la condición if antes de la

//$added 

línea

agrega esta línea

do_action( 'woocommerce_set_cart_cookies', TRUE );

esto configurará las cookies del carrito.

1 dic 2015 09:12:16
Comentarios

Sí, ahora está funcionando.

Mohamed Rihan Mohamed Rihan
1 dic 2015 09:15:53

¡¡Gracias!! Solucionó mi carrito vacío para usuarios invitados, que dejó de funcionar después de una actualización de WC 3.0

Gotschi Gotschi
13 jun 2018 15:12:53