2013-08-09 16:11:15 +00:00
< ? php
/**
* WooCommerce Cart Functions
*
* Functions for cart specific things .
*
* @ author WooThemes
* @ category Core
* @ package WooCommerce / Functions
* @ version 2.1 . 0
*/
if ( ! defined ( 'ABSPATH' ) ) exit ; // Exit if accessed directly
2013-08-19 17:19:27 +00:00
/**
* Prevent password protected products being added to the cart
*
* @ param bool $passed
* @ param int $product_id
* @ return bool
*/
2013-11-25 12:23:39 +00:00
function wc_protected_product_add_to_cart ( $passed , $product_id ) {
2013-08-19 17:19:27 +00:00
if ( post_password_required ( $product_id ) ) {
$passed = false ;
2013-11-13 04:29:03 +00:00
wc_add_notice ( __ ( 'This product is protected and cannot be purchased.' , 'woocommerce' ), 'error' );
2013-08-19 17:19:27 +00:00
}
return $passed ;
}
2013-11-25 12:23:39 +00:00
add_filter ( 'woocommerce_add_to_cart_validation' , 'wc_protected_product_add_to_cart' , 10 , 2 );
2013-08-19 17:19:27 +00:00
2013-08-09 16:11:15 +00:00
/**
* Clears the cart session when called
2013-11-25 12:23:39 +00:00
*
* @ return void
2013-08-09 16:11:15 +00:00
*/
2013-11-25 12:23:39 +00:00
function wc_empty_cart () {
2013-08-09 16:11:15 +00:00
global $woocommerce ;
2013-11-25 14:01:32 +00:00
if ( ! isset ( WC () -> cart ) || WC () -> cart == '' )
WC () -> cart = new WC_Cart ();
2013-08-09 16:11:15 +00:00
2013-11-25 14:01:32 +00:00
WC () -> cart -> empty_cart ( false );
2013-08-09 16:11:15 +00:00
}
2013-11-25 12:23:39 +00:00
add_action ( 'wp_logout' , 'wc_empty_cart' );
2013-08-09 16:11:15 +00:00
/**
* Load the cart upon login
2013-11-25 12:23:39 +00:00
*
2013-08-09 16:11:15 +00:00
* @ param mixed $user_login
* @ param mixed $user
2013-11-25 12:23:39 +00:00
* @ return void
2013-08-09 16:11:15 +00:00
*/
2013-11-25 12:23:39 +00:00
function wc_load_persistent_cart ( $user_login , $user = 0 ) {
2013-08-09 16:11:15 +00:00
global $woocommerce ;
if ( ! $user )
return ;
$saved_cart = get_user_meta ( $user -> ID , '_woocommerce_persistent_cart' , true );
if ( $saved_cart )
2013-11-25 14:01:32 +00:00
if ( empty ( WC () -> session -> cart ) || ! is_array ( WC () -> session -> cart ) || sizeof ( WC () -> session -> cart ) == 0 )
WC () -> session -> cart = $saved_cart [ 'cart' ];
2013-08-09 16:11:15 +00:00
}
2013-11-25 12:23:39 +00:00
add_action ( 'wp_login' , 'wc_load_persistent_cart' , 1 , 2 );
2013-08-09 16:11:15 +00:00
/**
* Add to cart messages .
*
* @ access public
2013-11-25 12:23:39 +00:00
* @ param int $product_id
2013-08-09 16:11:15 +00:00
* @ return void
*/
2013-11-25 12:23:39 +00:00
function wc_add_to_cart_message ( $product_id ) {
2013-08-09 16:11:15 +00:00
global $woocommerce ;
if ( is_array ( $product_id ) ) {
$titles = array ();
foreach ( $product_id as $id ) {
$titles [] = get_the_title ( $id );
}
$added_text = sprintf ( __ ( 'Added "%s" to your cart.' , 'woocommerce' ), join ( __ ( '" and "' , 'woocommerce' ), array_filter ( array_merge ( array ( join ( '", "' , array_slice ( $titles , 0 , - 1 ) ) ), array_slice ( $titles , - 1 ) ) ) ) );
} else {
$added_text = sprintf ( __ ( '"%s" was successfully added to your cart.' , 'woocommerce' ), get_the_title ( $product_id ) );
}
// Output success messages
if ( get_option ( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) :
$return_to = apply_filters ( 'woocommerce_continue_shopping_redirect' , wp_get_referer () ? wp_get_referer () : home_url () );
$message = sprintf ( '<a href="%s" class="button">%s</a> %s' , $return_to , __ ( 'Continue Shopping →' , 'woocommerce' ), $added_text );
else :
2013-11-25 14:07:22 +00:00
$message = sprintf ( '<a href="%s" class="button">%s</a> %s' , get_permalink ( wc_get_page_id ( 'cart' ) ), __ ( 'View Cart →' , 'woocommerce' ), $added_text );
2013-08-09 16:11:15 +00:00
endif ;
2013-11-25 12:23:39 +00:00
wc_add_notice ( apply_filters ( 'wc_add_to_cart_message' , $message ) );
2013-08-09 16:11:15 +00:00
}
/**
* Clear cart after payment .
*
* @ access public
* @ return void
*/
2013-11-25 12:23:39 +00:00
function wc_clear_cart_after_payment () {
2013-08-09 16:11:15 +00:00
global $woocommerce , $wp ;
if ( ! empty ( $wp -> query_vars [ 'order-received' ] ) ) {
$order_id = absint ( $wp -> query_vars [ 'order-received' ] );
if ( isset ( $_GET [ 'key' ] ) )
$order_key = $_GET [ 'key' ];
else
$order_key = '' ;
if ( $order_id > 0 ) {
$order = new WC_Order ( $order_id );
if ( $order -> order_key == $order_key ) {
2013-11-25 14:01:32 +00:00
WC () -> cart -> empty_cart ();
2013-08-09 16:11:15 +00:00
}
}
}
2013-11-25 14:01:32 +00:00
if ( WC () -> session -> order_awaiting_payment > 0 ) {
2013-08-09 16:11:15 +00:00
2013-11-25 14:01:32 +00:00
$order = new WC_Order ( WC () -> session -> order_awaiting_payment );
2013-08-09 16:11:15 +00:00
if ( $order -> id > 0 ) {
// If the order has not failed, or is not pending, the order must have gone through
if ( $order -> status != 'failed' && $order -> status != 'pending' )
2013-11-25 14:01:32 +00:00
WC () -> cart -> empty_cart ();
2013-08-09 16:11:15 +00:00
}
}
}
2013-11-25 12:23:39 +00:00
add_action ( 'get_header' , 'wc_clear_cart_after_payment' );
2013-08-09 16:11:15 +00:00