I need help
In my custom single-product.php template, I added the button
public function AddToCartButton() {
global $product;
if($product->is_type('variable') || $product->get_stock_status() !== 'instock') {
$disabled_btn_class = 'btn-am--disabled';
} else {
$disabled_btn_class = '';
}
$echo = '<form class="cart single-product-cart" method="post" action="woocommerce_ajax_add_to_cart" enctype="multipart/form-data">';
$echo .= '<button type="submit" class="single_add_to_cart_button button alt btn-am btn-am--red '. $disabled_btn_class .'" data-url="'. admin_url("admin-ajax.php").'"> ' . esc_html( $product->single_add_to_cart_text() ) .'</button>';
$echo .= '<input type="hidden" name="add-to-cart" value="'. absint( $product->get_id() ) .'" />';
$echo .= '<input type="hidden" name="product_id" value="'. absint( $product->get_id() ) .'" />';
$echo .= '<input type="hidden" name="quantity" value="1" />';
$echo .= '<input type="hidden" name="variation_id" class="variation_id" value="0" />';
$echo .= '</form>';
return $echo;
}
Custom AJAX call
public function __construct()
{
add_action('wp_ajax_woocommerce_ajax_add_to_cart', [$this, 'ajax_add_to_cart']);
add_action('wp_ajax_nopriv_woocommerce_ajax_add_to_cart', [$this, 'ajax_add_to_cart']);
}
function 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);
}
} 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();
}
This code works, and if refresh page, item added to cart, but this not work with hook woocommerce_add_to_cart_fragments
And in my functions.php I have this code for refresh update cart
add_filter( 'woocommerce_add_to_cart_fragments', 'wc_mini_cart_ajax_refresh' );
function wc_mini_cart_ajax_refresh( $fragments ) {
$fragments['#mcart-stotal'] = '<div id="mcart-stotal" class="mini-cart-footer__total">'.WC()->cart->get_cart_subtotal().'</div>';
ob_start();
echo '<div id="mcart-widget">';
woocommerce_mini_cart();
echo '</div>';
$fragments['#mcart-widget'] = ob_get_clean();
return $fragments;
}
And this hook works fine, but not for my custom AJAX button, why this happen?