This website uses cookies to personalize your experience. By using this website you agree to our cookie policy.

Reply To: Add to cart for a specific form

#52718
samuelepellizzarisamuelepellizzari
Participant

Hi Ernest,

I have just tried your modified script version, to no avail: it always adds 1 item to the cart, regardless of the quantity entered.

Am I missing anything?

Here is the complete code:

add_filter('asp_results', 'asp_add_to_cart_data', 10, 2);
function asp_add_to_cart_data($results, $search_id) {
	// Apply add to cart only to search ID = 2
	if ( $search_id != 2 ) {
		return $results;
	}

	$product_add_to_cart_text   = 'Add to cart';
	$variation_add_to_cart_text = '';   // Leave it empty to not display at all

	if (class_exists("WooCommerce")) {
		$_pf = new WC_Product_Factory();
		foreach ($results as &$r) {
			if (
				$r->content_type == "pagepost" &&
				in_array($r->post_type, array("product", "product_variation"))
			) {
				$product = $_pf->get_product($r->id);
				$is_variable = $product->is_type( 'variable' ) || $r->post_type == 'product_variation';
				$link = !$is_variable ? get_permalink(wc_get_page_id('shop')) : $product->get_permalink();
				$ajax = !$is_variable ? ' ajax_add_to_cart' : '';
				$text = !$is_variable ? $product_add_to_cart_text : $variation_add_to_cart_text;
				if ( empty($text) )
					continue;
				ob_start();
				?>
				<div class="woocommerce">
					<div class="quantity">
						<input type="number" step="1" min="1" max="" name="quantity" value="1" title="Quantity" class="input-text qty text" size="4" pattern="[0-9]*" inputmode="numeric">
					</div>
	<a href="<?php echo $link; ?>"
	   class="button product_type_simple add_to_cart_button<?php echo $ajax; ?>"
	   data-product_id="<?php echo $r->id; ?>" data-product_sku=""
	   rel="nofollow"><?php echo $text; ?></a>
</div>
				<?php
				$button = ob_get_clean();
				$r->content .= $button;
			}
		}
	}
	return $results;
}
//script
add_action('wp_footer', 'asp_add_to_cart_handler');
function asp_add_to_cart_handler() {
    ?>
    <script>
jQuery(function (t) {
	if ("undefined" == typeof wc_add_to_cart_params) return !1;
	var a = function () {
		t(".asp_r")
			.on("click", ".add_to_cart_button", this.onAddToCart)
			.on("click", ".remove_from_cart_button", this.onRemoveFromCart)
			.on("added_to_cart", this.updateButton)
			.on("added_to_cart", this.updateCartPage)
			.on("added_to_cart removed_from_cart", this.updateFragments);
	};
	(a.prototype.onAddToCart = function (a) {
		var o = t(this);
		if (o.is(".ajax_add_to_cart")) {
			if (!o.attr("data-product_id")) return !0;
			a.preventDefault(), o.removeClass("added"), o.addClass("loading");
			var r = {};
			r.quantity = parseInt( o.closest('.woocommerce').find('input[name=quantity]').val() || 1 );
			t.each(o.data(), function (t, a) {
				r[t] = a;
			}),
				t(document.body).trigger("adding_to_cart", [o, r]),
				t.post(wc_add_to_cart_params.wc_ajax_url.toString().replace("%%endpoint%%", "add_to_cart"), r, function (a) {
					a &&
					(a.error && a.product_url
						? (window.location = a.product_url)
						: "yes" !== wc_add_to_cart_params.cart_redirect_after_add
							? t(document.body).trigger("added_to_cart", [a.fragments, a.cart_hash, o])
							: (window.location = wc_add_to_cart_params.cart_url));
				});
		}
	}),
		(a.prototype.onRemoveFromCart = function (a) {
			var o = t(this),
				r = o.closest(".woocommerce-mini-cart-item");
			a.preventDefault(),
				r.block({ message: null, overlayCSS: { opacity: 0.6 } }),
				t
					.post(wc_add_to_cart_params.wc_ajax_url.toString().replace("%%endpoint%%", "remove_from_cart"), { cart_item_key: o.data("cart_item_key") }, function (a) {
						a && a.fragments ? t(document.body).trigger("removed_from_cart", [a.fragments, a.cart_hash, o]) : (window.location = o.attr("href"));
					})
					.fail(function () {
						window.location = o.attr("href");
					});
		}),
		(a.prototype.updateButton = function (a, o, r, e) {
			(e = void 0 !== e && e) &&
			(e.removeClass("loading"),
				e.addClass("added"),
			wc_add_to_cart_params.is_cart ||
			0 !== e.parent().find(".added_to_cart").length ||
			e.after(' <a href="' + wc_add_to_cart_params.cart_url + '" class="added_to_cart wc-forward" title="' + wc_add_to_cart_params.i18n_view_cart + '">' + wc_add_to_cart_params.i18n_view_cart + "</a>"),
				t(document.body).trigger("wc_cart_button_updated", [e]));
		}),
		(a.prototype.updateCartPage = function () {
			var a = window.location.toString().replace("add-to-cart", "added-to-cart");
			t(".shop_table.cart").load(a + " .shop_table.cart:eq(0) > *", function () {
				t(".shop_table.cart").stop(!0).css("opacity", "1").unblock(), t(document.body).trigger("cart_page_refreshed");
			}),
				t(".cart_totals").load(a + " .cart_totals:eq(0) > *", function () {
					t(".cart_totals").stop(!0).css("opacity", "1").unblock(), t(document.body).trigger("cart_totals_refreshed");
				});
		}),
		(a.prototype.updateFragments = function (a, o) {
			o &&
			(t.each(o, function (a) {
				t(a)
					.addClass("updating")
					.fadeTo("400", "0.6")
					.block({ message: null, overlayCSS: { opacity: 0.6 } });
			}),
				t.each(o, function (a, o) {
					t(a).replaceWith(o), t(a).stop(!0).css("opacity", "1").unblock();
				}),
				t(document.body).trigger("wc_fragments_loaded"));
		}),
		new a();
});
		
    </script>

    <?php
}