I am trying to change a public function that exists in woocommerceincludesclass-wc-coupon.php
Changing the core file is not good because I don’t want to change the core files every single time I update the woocommerce that’s why I am trying to find a way where I can just add the updated version of this function in my themes functions.php file to make it work
here the core function
/**
* Get discount amount for a cart item
*
* @param float $discounting_amount Amount the coupon is being applied to
* @param array|null $cart_item Cart item being discounted if applicable
* @param boolean $single True if discounting a single qty item, false if its the line
* @return float Amount this coupon has discounted
*/
public function get_discount_amount( $discounting_amount, $cart_item = null, $single = false ) {
$discount = 0;
if ( $this->type == 'fixed_product') {
$discount = $discounting_amount < $this->amount ? $discounting_amount : $this->amount;
// If dealing with a line and not a single item, we need to multiple fixed discount by cart item qty.
if ( ! $single && ! is_null( $cart_item ) ) {
// Discount for the line.
$discount = $discount * $cart_item['quantity'];
}
} elseif ( $this->type == 'percent_product' || $this->type == 'percent' ) {
$discount = round( ( $discounting_amount / 100 ) * $this->amount, WC()->cart->dp );
} elseif ( $this->type == 'fixed_cart' ) {
if ( ! is_null( $cart_item ) ) {
/**
* This is the most complex discount - we need to divide the discount between rows based on their price in
* proportion to the subtotal. This is so rows with different tax rates get a fair discount, and so rows
* with no price (free) don't get discounted.
*
* Get item discount by dividing item cost by subtotal to get a %
*/
$discount_percent = 0;
if ( WC()->cart->subtotal_ex_tax )
$discount_percent = ( $cart_item['data']->get_price_excluding_tax() * $cart_item['quantity'] ) / WC()->cart->subtotal_ex_tax;
$discount = min( ( $this->amount * $discount_percent ) / $cart_item['quantity'], $discounting_amount );
} else {
$discount = min( $this->amount, $discounting_amount );
}
}
// Handle the limit_usage_to_x_items option
if ( in_array( $this->type, array( 'percent_product', 'fixed_product' ) ) && ! is_null( $cart_item ) ) {
$qty = empty( $this->limit_usage_to_x_items ) ? $cart_item['quantity'] : min( $this->limit_usage_to_x_items, $cart_item['quantity'] );
if ( $single ) {
$discount = ( $discount * $qty ) / $cart_item['quantity'];
} else {
$discount = ( $discount / $cart_item['quantity'] ) * $qty;
}
}
return $discount;
}
I want to add $discount = $discount * -1;
before return $discount;
Thanks
Little late but in current WooCommerce version 2.3.x, you can use the filter ‘woocommerce_coupon_get_discount_amount’ to filter it in your theme to prevent updates from deleting your changes.