-
-
Save Jplus2/0c44d052e5889bce2ab9 to your computer and use it in GitHub Desktop.
Add quantity button and ajax functionality to add to cart button on product archive page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Custom Loop Add to Cart. | |
* | |
* Template with quantity and ajax. | |
*/ | |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly. | |
global $product; | |
?> | |
<?php if ( ! $product->is_in_stock() ) : ?> | |
<a href="<?php echo apply_filters( 'out_of_stock_add_to_cart_url', get_permalink( $product->id ) ); ?>" class="button"><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Read More', 'woocommerce' ) ); ?></a> | |
<?php else : ?> | |
<?php | |
$link = array( | |
'url' => '', | |
'label' => '', | |
'class' => '' | |
); | |
switch ( $product->product_type ) { | |
case "variable" : | |
$link['url'] = apply_filters( 'variable_add_to_cart_url', get_permalink( $product->id ) ); | |
$link['label'] = apply_filters( 'variable_add_to_cart_text', __( 'Select options', 'woocommerce' ) ); | |
break; | |
case "grouped" : | |
$link['url'] = apply_filters( 'grouped_add_to_cart_url', get_permalink( $product->id ) ); | |
$link['label'] = apply_filters( 'grouped_add_to_cart_text', __( 'View options', 'woocommerce' ) ); | |
break; | |
case "external" : | |
$link['url'] = apply_filters( 'external_add_to_cart_url', get_permalink( $product->id ) ); | |
$link['label'] = apply_filters( 'external_add_to_cart_text', __( 'Read More', 'woocommerce' ) ); | |
break; | |
default : | |
if ( $product->is_purchasable() ) { | |
$link['url'] = apply_filters( 'add_to_cart_url', esc_url( $product->add_to_cart_url() ) ); | |
$link['label'] = apply_filters( 'add_to_cart_text', __( 'Add to cart', 'woocommerce' ) ); | |
$link['class'] = apply_filters( 'add_to_cart_class', 'add_to_cart_button' ); | |
} else { | |
$link['url'] = apply_filters( 'not_purchasable_url', get_permalink( $product->id ) ); | |
$link['label'] = apply_filters( 'not_purchasable_text', __( 'Read More', 'woocommerce' ) ); | |
} | |
break; | |
} | |
// If there is a simple product. | |
if ( $product->product_type == 'simple' ) { | |
?> | |
<form action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" class="cart" method="post" enctype="multipart/form-data"> | |
<?php | |
// Displays the quantity box. | |
woocommerce_quantity_input(); | |
// Display the submit button. | |
echo sprintf( '<button type="submit" data-product_id="%s" data-product_sku="%s" data-quantity="1" class="%s button product_type_simple">%s</button>', esc_attr( $product->id ), esc_attr( $product->get_sku() ), esc_attr( $link['class'] ), esc_html( $link['label'] ) ); | |
?> | |
</form> | |
<?php | |
} else { | |
echo apply_filters( 'woocommerce_loop_add_to_cart_link', sprintf('<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="%s button product_type_%s">%s</a>', esc_url( $link['url'] ), esc_attr( $product->id ), esc_attr( $product->get_sku() ), esc_attr( $link['class'] ), esc_attr( $product->product_type ), esc_html( $link['label'] ) ), $product, $link ); | |
} | |
?> | |
<?php endif; ?> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function cs_wc_loop_add_to_cart_scripts() { | |
if ( is_shop() || is_product_category() || is_product_tag() || is_product() ) : ?> | |
<script> | |
jQuery(document).ready(function($) { | |
$(document).on( 'change', '.quantity .qty', function(event) { | |
$(this).parent('.quantity').siblings('.add_to_cart_button').attr('data-quantity', $(this).val()); | |
}); | |
// The purpose is if the quantity is zero, then we should not trigger the click event of the button | |
$(document).on( 'click', '.add_to_cart_button', function(event) { | |
if($(this).siblings(".quantity").find(".qty").val() <= 0){ | |
event.stopImmediatePropagation(); | |
return false; | |
} | |
}); | |
}); | |
</script> | |
<?php endif; | |
} | |
add_action( 'wp_footer', 'cs_wc_loop_add_to_cart_scripts' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add bugfix for the behavior that adds a product even if the quantity is set to zero.