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 () {
2014-05-20 09:01:26 +00:00
if ( ! isset ( WC () -> cart ) || WC () -> cart == '' ) {
2013-11-25 14:01:32 +00:00
WC () -> cart = new WC_Cart ();
2014-05-20 09:01:26 +00:00
}
2013-11-25 14:01:32 +00:00
WC () -> cart -> empty_cart ( false );
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
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
2014-02-11 12:49:02 +00:00
* @ param int | array $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
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 () );
2013-12-12 13:41:58 +00:00
$message = sprintf ( '<a href="%s" class="button wc-forward">%s</a> %s' , $return_to , __ ( 'Continue Shopping' , 'woocommerce' ), $added_text );
2013-08-09 16:11:15 +00:00
else :
2013-12-12 13:41:58 +00:00
$message = sprintf ( '<a href="%s" class="button wc-forward">%s</a> %s' , get_permalink ( wc_get_page_id ( 'cart' ) ), __ ( 'View Cart' , 'woocommerce' ), $added_text );
2013-08-09 16:11:15 +00:00
endif ;
2014-02-06 19:24:34 +00:00
wc_add_notice ( apply_filters ( 'wc_add_to_cart_message' , $message , $product_id ) );
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 () {
2014-02-11 12:49:02 +00:00
global $wp ;
2013-08-09 16:11:15 +00:00
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
2014-05-30 16:43:21 +00:00
if ( ! $order -> is_status ( array ( 'failed' , 'pending' ) ) ) {
2013-11-25 14:01:32 +00:00
WC () -> cart -> empty_cart ();
2014-05-30 16:43:21 +00:00
}
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
2013-11-25 15:17:18 +00:00
/**
* Get the subtotal
*
* @ access public
* @ return string
*/
function wc_cart_totals_subtotal_html () {
echo WC () -> cart -> get_cart_subtotal ();
}
/**
* Get shipping methods
*
* @ access public
* @ return void
*/
function wc_cart_totals_shipping_html () {
$packages = WC () -> shipping -> get_packages ();
foreach ( $packages as $i => $package ) {
$chosen_method = isset ( WC () -> session -> chosen_shipping_methods [ $i ] ) ? WC () -> session -> chosen_shipping_methods [ $i ] : '' ;
wc_get_template ( 'cart/cart-shipping.php' , array ( 'package' => $package , 'available_methods' => $package [ 'rates' ], 'show_package_details' => ( sizeof ( $packages ) > 1 ), 'index' => $i , 'chosen_method' => $chosen_method ) );
}
}
2014-03-21 00:54:42 +00:00
/**
* Get taxes total
*
* @ access public
* @ return void
*/
function wc_cart_totals_taxes_total_html () {
echo apply_filters ( 'woocommerce_cart_totals_taxes_total_html' , wc_price ( WC () -> cart -> get_taxes_total () ) );
}
2014-02-21 15:16:43 +00:00
/**
* Get a coupon label
*
* @ access public
* @ param string $coupon
* @ return void
*/
function wc_cart_totals_coupon_label ( $coupon ) {
if ( is_string ( $coupon ) )
$coupon = new WC_Coupon ( $coupon );
echo apply_filters ( 'woocommerce_cart_totals_coupon_label' , esc_html ( __ ( 'Coupon:' , 'woocommerce' ) . ' ' . $coupon -> code ), $coupon );
}
2013-11-25 15:17:18 +00:00
/**
* Get a coupon value
*
* @ access public
2014-02-11 12:49:02 +00:00
* @ param string $coupon
2013-11-25 15:17:18 +00:00
* @ return void
*/
function wc_cart_totals_coupon_html ( $coupon ) {
2014-03-18 21:29:15 +00:00
if ( is_string ( $coupon ) ) {
2013-11-25 15:17:18 +00:00
$coupon = new WC_Coupon ( $coupon );
2014-03-18 21:29:15 +00:00
}
2013-11-25 15:17:18 +00:00
$value = array ();
2014-01-14 00:53:16 +00:00
if ( ! empty ( WC () -> cart -> coupon_discount_amounts [ $coupon -> code ] ) ) {
$discount_html = '-' . wc_price ( WC () -> cart -> coupon_discount_amounts [ $coupon -> code ] );
} else {
$discount_html = '' ;
}
$value [] = apply_filters ( 'woocommerce_coupon_discount_amount_html' , $discount_html , $coupon );
2013-11-25 15:17:18 +00:00
2014-03-18 21:29:15 +00:00
if ( $coupon -> enable_free_shipping () ) {
2013-11-25 15:17:18 +00:00
$value [] = __ ( 'Free shipping coupon' , 'woocommerce' );
2014-03-18 21:29:15 +00:00
}
// get rid of empty array elements
$value = array_filter ( $value );
2013-11-25 15:17:18 +00:00
2014-04-07 08:51:09 +00:00
$value = implode ( ', ' , $value ) . ' <a href="' . add_query_arg ( 'remove_coupon' , $coupon -> code , defined ( 'WOOCOMMERCE_CHECKOUT' ) ? WC () -> cart -> get_checkout_url () : WC () -> cart -> get_cart_url () ) . '" class="woocommerce-remove-coupon">' . __ ( '[Remove]' , 'woocommerce' ) . '</a>' ;
2014-01-14 00:53:50 +00:00
echo apply_filters ( 'woocommerce_cart_totals_coupon_html' , $value , $coupon );
2013-11-25 15:17:18 +00:00
}
/**
* Get order total html including inc tax if needed
*
* @ access public
* @ return void
*/
function wc_cart_totals_order_total_html () {
echo '<strong>' . WC () -> cart -> get_total () . '</strong> ' ;
// If prices are tax inclusive, show taxes here
2014-01-22 14:10:05 +00:00
if ( get_option ( 'woocommerce_calc_taxes' ) == 'yes' && WC () -> cart -> tax_display_cart == 'incl' ) {
2013-11-25 15:17:18 +00:00
$tax_string_array = array ();
if ( get_option ( 'woocommerce_tax_total_display' ) == 'itemized' ) {
foreach ( WC () -> cart -> get_tax_totals () as $code => $tax )
$tax_string_array [] = sprintf ( '%s %s' , $tax -> formatted_amount , $tax -> label );
} else {
$tax_string_array [] = sprintf ( '%s %s' , wc_price ( WC () -> cart -> get_taxes_total ( true , true ) ), WC () -> countries -> tax_or_vat () );
}
if ( ! empty ( $tax_string_array ) )
echo '<small class="includes_tax">' . sprintf ( __ ( '(Includes %s)' , 'woocommerce' ), implode ( ', ' , $tax_string_array ) ) . '</small>' ;
}
}
/**
* Get the fee value
*
* @ param object $fee
* @ return void
*/
function wc_cart_totals_fee_html ( $fee ) {
2014-03-12 11:11:22 +00:00
$cart_totals_fee_html = ( 'excl' == WC () -> cart -> tax_display_cart ) ? wc_price ( $fee -> amount ) : wc_price ( $fee -> amount + $fee -> tax );
echo apply_filters ( 'woocommerce_cart_totals_fee_html' , $cart_totals_fee_html , $fee );
2013-11-25 15:17:18 +00:00
}
/**
* Get a shipping methods full label including price
* @ param object $method
* @ return string
*/
function wc_cart_totals_shipping_method_label ( $method ) {
$label = $method -> label ;
if ( $method -> cost > 0 ) {
if ( WC () -> cart -> tax_display_cart == 'excl' ) {
$label .= ': ' . wc_price ( $method -> cost );
if ( $method -> get_shipping_tax () > 0 && WC () -> cart -> prices_include_tax ) {
$label .= ' <small>' . WC () -> countries -> ex_tax_or_vat () . '</small>' ;
}
} else {
$label .= ': ' . wc_price ( $method -> cost + $method -> get_shipping_tax () );
if ( $method -> get_shipping_tax () > 0 && ! WC () -> cart -> prices_include_tax ) {
$label .= ' <small>' . WC () -> countries -> inc_tax_or_vat () . '</small>' ;
}
}
} elseif ( $method -> id !== 'free_shipping' ) {
$label .= ' (' . __ ( 'Free' , 'woocommerce' ) . ')' ;
}
return apply_filters ( 'woocommerce_cart_shipping_method_full_label' , $label , $method );
2014-02-10 12:36:34 +00:00
}
2014-04-08 15:28:27 +00:00
/**
* See if we only ship to billing addresses
* @ return bool
*/
function wc_ship_to_billing_address_only () {
return 'billing_only' === get_option ( 'woocommerce_ship_to_destination' );
}