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

Linkul tău este local.

tao tao
1 dec. 2015 07:27:46

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

Mohamed Rihan Mohamed Rihan
1 dec. 2015 07:28:49

Presupun că trebuie să adaugi suficiente "Macaroons" până când umpli cutia (8|16|32) pentru a debloca butonul Adaugă în coș. De asemenea, presupun că nu ești foarte familiarizat încă cu site-ul? Cea mai amuzantă "eroare" de astăzi, până acum!

tao tao
1 dec. 2015 07:34:33

Nu este vorba despre umplerea cutiei, încercați cu un coș gol și ștergeți toate cookie-urile din browser, atunci devine dificil să adăugați macaroane ca produs, dar alte produse pot fi adăugate simplu.

Mohamed Rihan Mohamed Rihan
1 dec. 2015 07:40:56

Sunteți pe o pagină de produs personalizabil. Nu puteți cumpăra o cutie goală de macaroane. Trebuie să specificați ce macaroane doriți în interior. Selectați cutia "Mică", apăsați butonul + de pe oricare macaroane până când cutia este plină și puteți comanda. Scriptul responsabil pentru aceasta se află în plugins/woocommerce/assets/js/frontend. Din păcate, toate sunt minificate.

tao tao
1 dec. 2015 07:49:33

Vă rugăm să ștergeți cookie-urile acelui site și să încercați să adăugați cutia de macaroane în coș. FYI, știu că trebuie să umpleți cutia cu macaroane pentru a activa butonul și asta nu este întrebarea. Întrebarea este de ce nu adaugă produsul în coșul de cumpărături când coșul este gol.

Mohamed Rihan Mohamed Rihan
1 dec. 2015 08:05:01

Nu pot reproduce bug-ul tău. Funcționează perfect la mine.

tao tao
1 dec. 2015 08:41:13
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.

1 dec. 2015 09:12:16
Comentarii

Da, acum funcționează.

Mohamed Rihan Mohamed Rihan
1 dec. 2015 09:15:53

mulțumesc!! Am rezolvat problema coșului gol pentru utilizatorii nelogati, care a încetat să mai funcționeze după actualizarea la WC 3.0

Gotschi Gotschi
13 iun. 2018 15:12:53