Merge pull request #6258 from shivapoudel/patch-2
Some changes in WC_Cart
This commit is contained in:
commit
d2fc731d4e
|
@ -88,7 +88,7 @@ class WC_Cart {
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
$this->tax = new WC_Tax();
|
$this->tax = new WC_Tax();
|
||||||
$this->prices_include_tax = get_option( 'woocommerce_prices_include_tax' ) == 'yes';
|
$this->prices_include_tax = get_option( 'woocommerce_prices_include_tax' ) == 'yes';
|
||||||
$this->round_at_subtotal = get_option('woocommerce_tax_round_at_subtotal') == 'yes';
|
$this->round_at_subtotal = get_option( 'woocommerce_tax_round_at_subtotal' ) == 'yes';
|
||||||
$this->tax_display_cart = get_option( 'woocommerce_tax_display_cart' );
|
$this->tax_display_cart = get_option( 'woocommerce_tax_display_cart' );
|
||||||
$this->dp = absint( get_option( 'woocommerce_price_num_decimals' ) );
|
$this->dp = absint( get_option( 'woocommerce_price_num_decimals' ) );
|
||||||
$this->display_totals_ex_tax = $this->tax_display_cart == 'excl';
|
$this->display_totals_ex_tax = $this->tax_display_cart == 'excl';
|
||||||
|
@ -120,32 +120,35 @@ class WC_Cart {
|
||||||
add_action( 'shutdown', array( $this, 'maybe_set_cart_cookies' ), 0 ); // Set cookies before shutdown and ob flushing
|
add_action( 'shutdown', array( $this, 'maybe_set_cart_cookies' ), 0 ); // Set cookies before shutdown and ob flushing
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the cart data from the PHP session during WordPress init and hooks in other methods.
|
* Loads the cart data from the PHP session during WordPress init and hooks in other methods.
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function init() {
|
public function init() {
|
||||||
$this->get_cart_from_session();
|
$this->get_cart_from_session();
|
||||||
|
|
||||||
add_action( 'woocommerce_check_cart_items', array( $this, 'check_cart_items' ), 1 );
|
add_action( 'woocommerce_check_cart_items', array( $this, 'check_cart_items' ), 1 );
|
||||||
add_action( 'woocommerce_check_cart_items', array( $this, 'check_cart_coupons' ), 1 );
|
add_action( 'woocommerce_check_cart_items', array( $this, 'check_cart_coupons' ), 1 );
|
||||||
add_action( 'woocommerce_after_checkout_validation', array( $this, 'check_customer_coupons' ), 1 );
|
add_action( 'woocommerce_after_checkout_validation', array( $this, 'check_customer_coupons' ), 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will set cart cookies if needed, once, during WP hook
|
* Will set cart cookies if needed, once, during WP hook
|
||||||
*/
|
*
|
||||||
public function maybe_set_cart_cookies() {
|
* @access public
|
||||||
if ( ! headers_sent() ) {
|
* @return void
|
||||||
if ( sizeof( $this->cart_contents ) > 0 ) {
|
*/
|
||||||
$this->set_cart_cookies( true );
|
public function maybe_set_cart_cookies() {
|
||||||
} elseif ( isset( $_COOKIE['woocommerce_items_in_cart'] ) ) {
|
if ( ! headers_sent() ) {
|
||||||
$this->set_cart_cookies( false );
|
if ( sizeof( $this->cart_contents ) > 0 ) {
|
||||||
}
|
$this->set_cart_cookies( true );
|
||||||
}
|
} elseif ( isset( $_COOKIE['woocommerce_items_in_cart'] ) ) {
|
||||||
}
|
$this->set_cart_cookies( false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set cart hash cookie and items in cart.
|
* Set cart hash cookie and items in cart.
|
||||||
|
@ -159,13 +162,13 @@ class WC_Cart {
|
||||||
wc_setcookie( 'woocommerce_items_in_cart', 1 );
|
wc_setcookie( 'woocommerce_items_in_cart', 1 );
|
||||||
wc_setcookie( 'woocommerce_cart_hash', md5( json_encode( $this->get_cart() ) ) );
|
wc_setcookie( 'woocommerce_cart_hash', md5( json_encode( $this->get_cart() ) ) );
|
||||||
} elseif ( isset( $_COOKIE['woocommerce_items_in_cart'] ) ) {
|
} elseif ( isset( $_COOKIE['woocommerce_items_in_cart'] ) ) {
|
||||||
wc_setcookie( 'woocommerce_items_in_cart', 0, time() - 3600 );
|
wc_setcookie( 'woocommerce_items_in_cart', 0, time() - HOUR_IN_SECONDS );
|
||||||
wc_setcookie( 'woocommerce_cart_hash', '', time() - 3600 );
|
wc_setcookie( 'woocommerce_cart_hash', '', time() - HOUR_IN_SECONDS );
|
||||||
}
|
}
|
||||||
do_action( 'woocommerce_set_cart_cookies', $set );
|
do_action( 'woocommerce_set_cart_cookies', $set );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Cart Session Handling */
|
/* Cart Session Handling */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -233,6 +236,9 @@ class WC_Cart {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the php session data for the cart and coupons.
|
* Sets the php session data for the cart and coupons.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function set_session() {
|
public function set_session() {
|
||||||
// Set cart and coupon session data
|
// Set cart and coupon session data
|
||||||
|
@ -273,7 +279,7 @@ class WC_Cart {
|
||||||
do_action( 'woocommerce_cart_emptied' );
|
do_action( 'woocommerce_cart_emptied' );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Persistent cart handling */
|
/* Persistent cart handling */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -299,7 +305,7 @@ class WC_Cart {
|
||||||
delete_user_meta( get_current_user_id(), '_woocommerce_persistent_cart' );
|
delete_user_meta( get_current_user_id(), '_woocommerce_persistent_cart' );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Cart Data Functions */
|
/* Cart Data Functions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -392,6 +398,8 @@ class WC_Cart {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Looks through cart items and checks the posts are not trashed or deleted.
|
* Looks through cart items and checks the posts are not trashed or deleted.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
* @return bool|WP_Error
|
* @return bool|WP_Error
|
||||||
*/
|
*/
|
||||||
public function check_cart_item_validity() {
|
public function check_cart_item_validity() {
|
||||||
|
@ -515,15 +523,15 @@ class WC_Cart {
|
||||||
$taxonomy = wc_attribute_taxonomy_name( str_replace( 'attribute_pa_', '', urldecode( $name ) ) );
|
$taxonomy = wc_attribute_taxonomy_name( str_replace( 'attribute_pa_', '', urldecode( $name ) ) );
|
||||||
|
|
||||||
// If this is a term slug, get the term's nice name
|
// If this is a term slug, get the term's nice name
|
||||||
if ( taxonomy_exists( $taxonomy ) ) {
|
if ( taxonomy_exists( $taxonomy ) ) {
|
||||||
$term = get_term_by( 'slug', $value, $taxonomy );
|
$term = get_term_by( 'slug', $value, $taxonomy );
|
||||||
if ( ! is_wp_error( $term ) && $term && $term->name ) {
|
if ( ! is_wp_error( $term ) && $term && $term->name ) {
|
||||||
$value = $term->name;
|
$value = $term->name;
|
||||||
}
|
}
|
||||||
$label = wc_attribute_label( $taxonomy );
|
$label = wc_attribute_label( $taxonomy );
|
||||||
|
|
||||||
// If this is a custom option slug, get the options name
|
// If this is a custom option slug, get the options name
|
||||||
} else {
|
} else {
|
||||||
$value = apply_filters( 'woocommerce_variation_option_name', $value );
|
$value = apply_filters( 'woocommerce_variation_option_name', $value );
|
||||||
$product_attributes = $cart_item['data']->get_attributes();
|
$product_attributes = $cart_item['data']->get_attributes();
|
||||||
if ( isset( $product_attributes[ str_replace( 'attribute_', '', $name ) ] ) ) {
|
if ( isset( $product_attributes[ str_replace( 'attribute_', '', $name ) ] ) ) {
|
||||||
|
@ -700,7 +708,7 @@ class WC_Cart {
|
||||||
$tax_totals[ $code ]->amount = 0;
|
$tax_totals[ $code ]->amount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$tax_totals[ $code ]->tax_rate_id = $key;
|
$tax_totals[ $code ]->tax_rate_id = $key;
|
||||||
$tax_totals[ $code ]->is_compound = $this->tax->is_compound( $key );
|
$tax_totals[ $code ]->is_compound = $this->tax->is_compound( $key );
|
||||||
$tax_totals[ $code ]->label = $this->tax->get_rate_label( $key );
|
$tax_totals[ $code ]->label = $this->tax->get_rate_label( $key );
|
||||||
$tax_totals[ $code ]->amount += wc_round_tax_total( $tax );
|
$tax_totals[ $code ]->amount += wc_round_tax_total( $tax );
|
||||||
|
@ -716,60 +724,60 @@ class WC_Cart {
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if product is in the cart and return cart item key.
|
* Check if product is in the cart and return cart item key.
|
||||||
*
|
*
|
||||||
* Cart item key will be unique based on the item and its properties, such as variations.
|
* Cart item key will be unique based on the item and its properties, such as variations.
|
||||||
*
|
*
|
||||||
* @param mixed id of product to find in the cart
|
* @param mixed id of product to find in the cart
|
||||||
* @return string cart item key
|
* @return string cart item key
|
||||||
*/
|
*/
|
||||||
public function find_product_in_cart( $cart_id = false ) {
|
public function find_product_in_cart( $cart_id = false ) {
|
||||||
if ( $cart_id !== false ) {
|
if ( $cart_id !== false ) {
|
||||||
if ( is_array( $this->cart_contents ) ) {
|
if ( is_array( $this->cart_contents ) ) {
|
||||||
foreach ( $this->cart_contents as $cart_item_key => $cart_item ) {
|
foreach ( $this->cart_contents as $cart_item_key => $cart_item ) {
|
||||||
if ( $cart_item_key == $cart_id ) {
|
if ( $cart_item_key == $cart_id ) {
|
||||||
return $cart_item_key;
|
return $cart_item_key;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a unique ID for the cart item being added.
|
* Generate a unique ID for the cart item being added.
|
||||||
*
|
*
|
||||||
* @param int $product_id - id of the product the key is being generated for
|
* @param int $product_id - id of the product the key is being generated for
|
||||||
* @param int $variation_id of the product the key is being generated for
|
* @param int $variation_id of the product the key is being generated for
|
||||||
* @param array $variation data for the cart item
|
* @param array $variation data for the cart item
|
||||||
* @param array $cart_item_data other cart item data passed which affects this items uniqueness in the cart
|
* @param array $cart_item_data other cart item data passed which affects this items uniqueness in the cart
|
||||||
* @return string cart item key
|
* @return string cart item key
|
||||||
*/
|
*/
|
||||||
public function generate_cart_id( $product_id, $variation_id = 0, $variation = array(), $cart_item_data = array() ) {
|
public function generate_cart_id( $product_id, $variation_id = 0, $variation = array(), $cart_item_data = array() ) {
|
||||||
$id_parts = array( $product_id );
|
$id_parts = array( $product_id );
|
||||||
|
|
||||||
if ( $variation_id && 0 != $variation_id )
|
if ( $variation_id && 0 != $variation_id )
|
||||||
$id_parts[] = $variation_id;
|
$id_parts[] = $variation_id;
|
||||||
|
|
||||||
if ( is_array( $variation ) && ! empty( $variation ) ) {
|
if ( is_array( $variation ) && ! empty( $variation ) ) {
|
||||||
$variation_key = '';
|
$variation_key = '';
|
||||||
foreach ( $variation as $key => $value ) {
|
foreach ( $variation as $key => $value ) {
|
||||||
$variation_key .= trim( $key ) . trim( $value );
|
$variation_key .= trim( $key ) . trim( $value );
|
||||||
}
|
}
|
||||||
$id_parts[] = $variation_key;
|
$id_parts[] = $variation_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( is_array( $cart_item_data ) && ! empty( $cart_item_data ) ) {
|
if ( is_array( $cart_item_data ) && ! empty( $cart_item_data ) ) {
|
||||||
$cart_item_data_key = '';
|
$cart_item_data_key = '';
|
||||||
foreach ( $cart_item_data as $key => $value ) {
|
foreach ( $cart_item_data as $key => $value ) {
|
||||||
if ( is_array( $value ) ) $value = http_build_query( $value );
|
if ( is_array( $value ) ) $value = http_build_query( $value );
|
||||||
$cart_item_data_key .= trim($key) . trim($value);
|
$cart_item_data_key .= trim($key) . trim($value);
|
||||||
}
|
}
|
||||||
$id_parts[] = $cart_item_data_key;
|
$id_parts[] = $cart_item_data_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
return md5( implode( '_', $id_parts ) );
|
return md5( implode( '_', $id_parts ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a product to the cart.
|
* Add a product to the cart.
|
||||||
|
@ -894,8 +902,8 @@ class WC_Cart {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( did_action( 'wp' ) ) {
|
if ( did_action( 'wp' ) ) {
|
||||||
$this->set_cart_cookies( sizeof( $this->cart_contents ) > 0 );
|
$this->set_cart_cookies( sizeof( $this->cart_contents ) > 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
do_action( 'woocommerce_add_to_cart', $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data );
|
do_action( 'woocommerce_add_to_cart', $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data );
|
||||||
|
|
||||||
|
@ -925,7 +933,7 @@ class WC_Cart {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Cart Calculation Functions */
|
/* Cart Calculation Functions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -944,8 +952,6 @@ class WC_Cart {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate totals for the items in the cart.
|
* Calculate totals for the items in the cart.
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
*/
|
||||||
public function calculate_totals() {
|
public function calculate_totals() {
|
||||||
|
|
||||||
|
@ -1145,7 +1151,7 @@ class WC_Cart {
|
||||||
|
|
||||||
// Tax rows - merge the totals we just got
|
// Tax rows - merge the totals we just got
|
||||||
foreach ( array_keys( $this->taxes + $discounted_taxes ) as $key ) {
|
foreach ( array_keys( $this->taxes + $discounted_taxes ) as $key ) {
|
||||||
$this->taxes[ $key ] = ( isset( $discounted_taxes[ $key ] ) ? $discounted_taxes[ $key ] : 0 ) + ( isset( $this->taxes[ $key ] ) ? $this->taxes[ $key ] : 0 );
|
$this->taxes[ $key ] = ( isset( $discounted_taxes[ $key ] ) ? $discounted_taxes[ $key ] : 0 ) + ( isset( $this->taxes[ $key ] ) ? $this->taxes[ $key ] : 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1171,7 +1177,7 @@ class WC_Cart {
|
||||||
|
|
||||||
// Tax rows - merge the totals we just got
|
// Tax rows - merge the totals we just got
|
||||||
foreach ( array_keys( $this->taxes + $discounted_taxes ) as $key ) {
|
foreach ( array_keys( $this->taxes + $discounted_taxes ) as $key ) {
|
||||||
$this->taxes[ $key ] = ( isset( $discounted_taxes[ $key ] ) ? $discounted_taxes[ $key ] : 0 ) + ( isset( $this->taxes[ $key ] ) ? $this->taxes[ $key ] : 0 );
|
$this->taxes[ $key ] = ( isset( $discounted_taxes[ $key ] ) ? $discounted_taxes[ $key ] : 0 ) + ( isset( $this->taxes[ $key ] ) ? $this->taxes[ $key ] : 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1245,7 +1251,6 @@ class WC_Cart {
|
||||||
/**
|
/**
|
||||||
* remove_taxes function.
|
* remove_taxes function.
|
||||||
*
|
*
|
||||||
* @access public
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function remove_taxes() {
|
public function remove_taxes() {
|
||||||
|
@ -1273,7 +1278,7 @@ class WC_Cart {
|
||||||
return apply_filters( 'woocommerce_cart_needs_payment', $this->total > 0, $this );
|
return apply_filters( 'woocommerce_cart_needs_payment', $this->total > 0, $this );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Shipping related functions */
|
/* Shipping related functions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -1442,7 +1447,7 @@ class WC_Cart {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Coupons/Discount related functions */
|
/* Coupons/Discount related functions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -1830,7 +1835,7 @@ class WC_Cart {
|
||||||
$this->coupon_applied_count[ $code ] += $count;
|
$this->coupon_applied_count[ $code ] += $count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Fees API to add additional costs to orders */
|
/* Fees API to add additional costs to orders */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -1912,7 +1917,7 @@ class WC_Cart {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Get Formatted Totals */
|
/* Get Formatted Totals */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue