繁体   English   中英

WooCommerce 产品包 ajax 添加到购物车

[英]WooCommerce Product bundle ajax add to cart

我的代码没有使用 AJAX 产品包添加到购物车,但它适用于简单和可变的产品。

如果我禁用 AJAX 调用功能,它会工作,但会刷新页面。

$(document).on('click', '.single_add_to_cart_button', function (e) {
    e.preventDefault();
    var $thisbutton = $(this),
        $form = $thisbutton.closest('form.cart'),
        id = $thisbutton.val(),
        product_qty = $form.find('input[name=quantity]').val() || 1,
        product_id = $form.find('input[name=add-to-cart]').val() || id,
        variation_id = $form.find('input[name=variation_id]').val() || 0;

    var data = {
      action: 'woocommerce_ajax_add_to_cart',
      product_id: product_id,
      product_sku: '',
      quantity: product_qty,
      variation_id: variation_id,
    };

    $(document.body).trigger('adding_to_cart', [$thisbutton, data]);

    $.ajax({
      type: 'post',
      url: wc_add_to_cart_params.ajax_url,
      data: data,
      beforeSend: function (response) {
        $thisbutton.removeClass('added').addClass('loading');
      },
      complete: function (response) {
        $thisbutton.addClass('added').removeClass('loading');
      },
      success: function (response) {
        if (response.error & response.product_url) {
          window.location = response.product_url;
          return;
        } else {
          $(document.body).trigger('added_to_cart', [response.fragments, response.cart_hash, $thisbutton]);
          // if ($( "#mydiv" ).hasClass('disabled')) {
          //   $('#sidebar-right-hidden').addClass('is-active');
          // }
          $('#sidebar-right-hidden').addClass('is-active');
          $('#addToCartModal').modal('hide');
        }
      },
    });
    return false;
  });
add_action('wp_ajax_woocommerce_ajax_add_to_cart', 'woocommerce_ajax_add_to_cart');
add_action('wp_ajax_nopriv_woocommerce_ajax_add_to_cart', 'woocommerce_ajax_add_to_cart');

function woocommerce_ajax_add_to_cart() {
    $product_id = apply_filters('woocommerce_add_to_cart_product_id', absint($_POST['product_id']));
    $quantity = empty($_POST['quantity']) ? 1 : wc_stock_amount($_POST['quantity']);
    $variation_id = absint($_POST['variation_id']);
    $passed_validation = apply_filters('woocommerce_add_to_cart_validation', true, $product_id, $quantity);
    $product_status = get_post_status($product_id);

    if ($passed_validation && WC()->cart->add_to_cart($product_id, $quantity, $variation_id) && 'publish' === $product_status) {
    do_action('woocommerce_ajax_added_to_cart', $product_id);

    if ('yes' === get_option('woocommerce_cart_redirect_after_add')) {
      wc_add_to_cart_message(array($product_id => $quantity), true);
    }

    WC_AJAX :: get_refreshed_fragments();
    } else {
    $data = array(
      'error' => true,
      'product_url' => apply_filters('woocommerce_cart_redirect_after_error', get_permalink($product_id), $product_id)
    );

    echo wp_send_json($data);
    }
    wp_die();
}

我收到错误消息: "test" cannot be added to your cart. Please choose "Black Belt" options... "test" cannot be added to your cart. Please choose "Black Belt" options...我想这与产品包不兼容。 我从控制台中的 admin-ajax.php 得到这个:

{error: true, product_url: "https://5050.local/produs/test/"}
error: true
product_url: "https://5050.local/produs/test/"

该代码应将产品包添加到购物车。

我怎样才能让它工作?

无法购买分组产品 - 它们是其他产品的包装。 您必须将所有子产品一一添加到购物车。

检查 WooCommerce 分组产品类,您会有所了解

WooCommerce\\Classes\\Products\\WC_Product_Grouped

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM