Defer cart cookie being set
This commit is contained in:
parent
779613b062
commit
137bf945ab
|
@ -114,6 +114,7 @@ class WC_Cart {
|
|||
);
|
||||
|
||||
add_action( 'init', array( $this, 'init' ), 5 ); // Get cart on init
|
||||
add_action( 'wp', array( $this, 'maybe_set_cart_cookies' ), 99 ); // Set cookies
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -130,6 +131,35 @@ class WC_Cart {
|
|||
add_action( 'woocommerce_after_checkout_validation', array( $this, 'check_customer_coupons' ), 1 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Will set cart cookies if needed, once, during WP hook
|
||||
*/
|
||||
public function maybe_set_cart_cookies() {
|
||||
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.
|
||||
*
|
||||
* @access private
|
||||
* @param bool $set (default: true)
|
||||
* @return void
|
||||
*/
|
||||
private function set_cart_cookies( $set = true ) {
|
||||
if ( $set ) {
|
||||
wc_setcookie( 'woocommerce_items_in_cart', 1 );
|
||||
wc_setcookie( 'woocommerce_cart_hash', md5( json_encode( $this->get_cart() ) ) );
|
||||
} elseif ( isset( $_COOKIE['woocommerce_items_in_cart'] ) ) {
|
||||
wc_setcookie( 'woocommerce_items_in_cart', 0, time() - 3600 );
|
||||
wc_setcookie( 'woocommerce_cart_hash', '', time() - 3600 );
|
||||
}
|
||||
do_action( 'woocommerce_set_cart_cookies', $set );
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Cart Session Handling */
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
@ -187,8 +217,6 @@ class WC_Cart {
|
|||
WC()->session->cart = $this->get_cart_for_session();
|
||||
}
|
||||
|
||||
$this->set_cart_cookies( sizeof( $this->cart_contents ) > 0 );
|
||||
|
||||
// Trigger action
|
||||
do_action( 'woocommerce_cart_loaded_from_session', $this );
|
||||
|
||||
|
@ -891,9 +919,12 @@ class WC_Cart {
|
|||
|
||||
}
|
||||
|
||||
if ( did_action( 'wp' ) ) {
|
||||
$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 );
|
||||
|
||||
$this->set_cart_cookies();
|
||||
$this->calculate_totals();
|
||||
|
||||
return true;
|
||||
|
@ -920,25 +951,6 @@ class WC_Cart {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set cart hash cookie and items in cart.
|
||||
*
|
||||
* @access private
|
||||
* @param bool $set (default: true)
|
||||
* @return void
|
||||
*/
|
||||
private function set_cart_cookies( $set = true ) {
|
||||
if ( $set ) {
|
||||
wc_setcookie( 'woocommerce_items_in_cart', 1 );
|
||||
wc_setcookie( 'woocommerce_cart_hash', md5( json_encode( $this->get_cart() ) ) );
|
||||
} elseif ( isset( $_COOKIE['woocommerce_items_in_cart'] ) ) {
|
||||
wc_setcookie( 'woocommerce_items_in_cart', 0, time() - 3600 );
|
||||
wc_setcookie( 'woocommerce_cart_hash', '', time() - 3600 );
|
||||
}
|
||||
|
||||
do_action( 'woocommerce_set_cart_cookies', $set );
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Cart Calculation Functions */
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
|
Loading…
Reference in New Issue