Не работает добавление товара в корзину через Ajax в WooCommerce

1 дек. 2015 г., 07:22:13
Просмотры: 14.4K
Голосов: 1

В WooCommerce метод ajax добавления в корзину не работает, когда корзина пуста. Если в корзине уже есть товары, то мой ajax-запрос срабатывает, но с пустой корзиной не добавляет. И никаких ошибок.

Вот ссылка. 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);
                        }
                    });
7
Комментарии

Ваша ссылка локальная.

tao tao
1 дек. 2015 г. 07:27:46

извините :) http://izi-dev.fr/forreygalland/product/macaroons/

Mohamed Rihan Mohamed Rihan
1 дек. 2015 г. 07:28:49

Полагаю, вам нужно добавить достаточное количество "Macaroons", чтобы заполнить коробку (8|16|32), чтобы разблокировать кнопку Добавить в корзину. Также предполагаю, что вы пока не очень знакомы с сайтом? Самая забавная "ошибка" на сегодня, безусловно!

tao tao
1 дек. 2015 г. 07:34:33

Дело не в заполнении коробки. Попробуйте с пустой корзиной и очистите все cookies в браузере — тогда будет сложно добавить макарун как товар, в то время как другие продукты добавляются без проблем.

Mohamed Rihan Mohamed Rihan
1 дек. 2015 г. 07:40:56

Вы находитесь на странице настраиваемого товара. Вы не можете купить пустую коробку макарунов. Вам нужно указать, какие именно макаруны вы хотите внутри. Выберите коробку "Маленькая", нажмите кнопку + у любого макаруна, пока коробка не заполнится, и тогда вы сможете оформить заказ. Скрипт, отвечающий за это, находится в plugins/woocommerce/assets/js/frontend. К сожалению, все файлы минифицированы.

tao tao
1 дек. 2015 г. 07:49:33

Пожалуйста, очистите cookies этого сайта и попробуйте добавить коробку макарунов в корзину. К вашему сведению, я знаю, что нужно заполнить коробку макарунами, чтобы активировать кнопку, и вопрос не в этом. Вопрос в том, почему товар не добавляется в корзину, когда она пуста.

Mohamed Rihan Mohamed Rihan
1 дек. 2015 г. 08:05:01

Я не могу воспроизвести ваш баг. У меня всё работает идеально.

tao tao
1 дек. 2015 г. 08:41:13
Показать остальные 2 комментариев
Все ответы на вопрос 1
2

Я думаю, ваша функция php add_to_cart не устанавливает куки корзины, вы можете сделать это вручную, добавив эту строку внутри условия if перед строкой

//$added 

добавьте эту строку

do_action( 'woocommerce_set_cart_cookies', TRUE );

это установит куки корзины.

1 дек. 2015 г. 09:12:16
Комментарии

Да, теперь это работает.

Mohamed Rihan Mohamed Rihan
1 дек. 2015 г. 09:15:53

Спасибо!! Исправил проблему с пустой корзиной для гостевых пользователей, которая перестала работать после обновления до WC 3.0

Gotschi Gotschi
13 июн. 2018 г. 15:12:53