/**
* Plugin Name: WooCommerce Custom Add To Cart Plus & Minus Button
* Description: To add custom plus and minus button for add to cart items.
* Version: 1.0.0
* Author: Meatworx
*
* @package WooCommerce Custom Add To Cart Plus & Minus Button
*/
defined( 'ABSPATH' ) || exit(); // Exit if accessed directly.
if ( ! class_exists( 'Rk_Plus_Minus' ) ) {
/**
* Main Class.
*/
class Rk_Plus_Minus {
/**
* The instance variable of the class.
*
* @var $instance.
*/
protected static $instance = null;
/**
* Constructor of this class.
*/
public function __construct() {
add_action( 'woocommerce_after_quantity_input_field', array( $this, 'rk_display_quantity_plus' ) );
add_action( 'woocommerce_before_quantity_input_field', array( $this, 'rk_display_quantity_minus' ) );
add_action( 'wp_footer', array( $this, 'rk_add_cart_quantity_plus_minus' ) );
}
/**
* Display plus button after Add to Cart button.
*/
public function rk_display_quantity_plus() {
echo '';
}
/**
* Display minus button before Add to Cart button.
*/
public function rk_display_quantity_minus() {
echo '';
}
/**
* Enqueue script.
*/
public function rk_add_cart_quantity_plus_minus() {
if ( ! is_product() && ! is_cart() ) {
return;
}
wc_enqueue_js(
"$(document).on( 'click', 'button.plus, button.minus', function() {
var qty = $( this ).parent( '.quantity' ).find( '.qty' );
var val = parseFloat(qty.val());
var max = parseFloat(qty.attr( 'max' ));
var min = parseFloat(qty.attr( 'min' ));
var step = parseFloat(qty.attr( 'step' ));
if ( $( this ).is( '.plus' ) ) {
if ( max && ( max <= val ) ) {
qty.val( max ).change();
} else {
qty.val( val + step ).change();
}
} else {
if ( min && ( min >= val ) ) {
qty.val( min ).change();
} else if ( val > 1 ) {
qty.val( val - step ).change();
}
}
});"
);
}
/**
* Instance of this class.
*
* @return object.
*/
public static function get_instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
}
}
Rk_Plus_Minus::get_instance();