woocommerce/shortcodes/shortcode-cart.php

195 lines
8.0 KiB
PHP
Raw Normal View History

2011-08-10 17:11:11 +00:00
<?php
/**
* Cart Shortcode
*
* Used on the cart page, the cart shortcode displays the cart contents and interface for coupon codes and other cart bits and pieces.
*
* @package WooCommerce
* @category Shortcode
* @author WooThemes
*/
function get_woocommerce_cart( $atts ) {
global $woocommerce;
return $woocommerce->shortcode_wrapper('woocommerce_cart', $atts);
2011-08-10 17:11:11 +00:00
}
function woocommerce_cart( $atts ) {
global $woocommerce;
2011-08-10 17:11:11 +00:00
$errors = array();
$validation = &new woocommerce_validation();
2011-08-10 17:11:11 +00:00
// Process Discount Codes
if (isset($_POST['apply_coupon']) && $_POST['apply_coupon'] && $woocommerce->verify_nonce('cart')) :
2011-08-10 17:11:11 +00:00
$coupon_code = stripslashes(trim($_POST['coupon_code']));
$woocommerce->cart->add_discount($coupon_code);
2011-08-10 17:11:11 +00:00
// Update Shipping
elseif (isset($_POST['calc_shipping']) && $_POST['calc_shipping'] && $woocommerce->verify_nonce('cart')) :
2011-08-10 17:11:11 +00:00
unset($_SESSION['_chosen_shipping_method']);
2011-08-10 17:11:11 +00:00
$country = $_POST['calc_shipping_country'];
$state = $_POST['calc_shipping_state'];
$postcode = $_POST['calc_shipping_postcode'];
if ($postcode && !$validation->is_postcode( $postcode, $country )) :
$woocommerce->add_error( __('Please enter a valid postcode/ZIP.', 'woothemes') );
2011-08-10 17:11:11 +00:00
$postcode = '';
elseif ($postcode) :
$postcode = $validation->format_postcode( $postcode, $country );
2011-08-10 17:11:11 +00:00
endif;
if ($country) :
// Update customer location
$woocommerce->customer->set_location( $country, $state, $postcode );
$woocommerce->customer->set_shipping_location( $country, $state, $postcode );
2011-08-10 17:11:11 +00:00
// Re-calc price
$woocommerce->cart->calculate_totals();
2011-08-10 17:11:11 +00:00
$woocommerce->add_message( __('Shipping costs updated.', 'woothemes') );
2011-08-10 17:11:11 +00:00
else :
$woocommerce->customer->set_shipping_location( '', '', '' );
2011-08-10 17:11:11 +00:00
$woocommerce->add_message( __('Shipping costs updated.', 'woothemes') );
2011-08-10 17:11:11 +00:00
endif;
endif;
$result = $woocommerce->cart->check_cart_item_stock();
2011-08-10 17:11:11 +00:00
if (is_wp_error($result)) :
$woocommerce->add_error( $result->get_error_message() );
2011-08-10 17:11:11 +00:00
endif;
$woocommerce->show_messages();
2011-08-10 17:11:11 +00:00
if (sizeof($woocommerce->cart->cart_contents)==0) :
2011-08-10 17:11:11 +00:00
echo '<p>'.__('Your cart is empty.', 'woothemes').'</p>';
return;
endif;
?>
<form action="<?php echo $woocommerce->cart->get_cart_url(); ?>" method="post">
2011-08-10 17:11:11 +00:00
<table class="shop_table cart" cellspacing="0">
<thead>
<tr>
<th class="product-remove"></th>
<th class="product-thumbnail"></th>
<th class="product-name"><span class="nobr"><?php _e('Product Name', 'woothemes'); ?></span></th>
<th class="product-price"><span class="nobr"><?php _e('Unit Price', 'woothemes'); ?></span></th>
<th class="product-quantity"><?php _e('Quantity', 'woothemes'); ?></th>
<th class="product-subtotal"><?php _e('Price', 'woothemes'); ?></th>
</tr>
</thead>
<tbody>
<?php
if (sizeof($woocommerce->cart->cart_contents)>0) :
foreach ($woocommerce->cart->cart_contents as $cart_item_key => $values) :
2011-08-10 17:11:11 +00:00
$_product = $values['data'];
if ($_product->exists() && $values['quantity']>0) :
2011-08-22 12:26:17 +00:00
?>
<tr>
<td class="product-remove"><a href="<?php echo $woocommerce->cart->get_remove_url($cart_item_key); ?>" class="remove" title="<?php _e('Remove this item', 'woothemes'); ?>">&times;</a></td>
2011-08-22 12:26:17 +00:00
<td class="product-thumbnail">
<a href="<?php echo get_permalink($values['product_id']); ?>">
<?php
if ($values['variation_id'] && has_post_thumbnail($values['variation_id'])) :
2011-08-27 19:20:28 +00:00
echo get_the_post_thumbnail($values['variation_id'], 'shop_thumbnail');
2011-08-22 12:26:17 +00:00
elseif (has_post_thumbnail($values['product_id'])) :
2011-08-27 19:20:28 +00:00
echo get_the_post_thumbnail($values['product_id'], 'shop_thumbnail');
2011-08-22 12:26:17 +00:00
else :
echo '<img src="'.$woocommerce->plugin_url(). '/assets/images/placeholder.png" alt="Placeholder" width="'.$woocommerce->get_image_size('shop_thumbnail_image_width').'" height="'.$woocommerce->get_image_size('shop_thumbnail_image_height').'" />';
2011-08-22 12:26:17 +00:00
endif;
?>
</a>
</td>
<td class="product-name">
<a href="<?php echo get_permalink($values['product_id']); ?>"><?php echo apply_filters('woocommerce_cart_product_title', $_product->get_title(), $_product); ?></a>
<?php
if($_product instanceof woocommerce_product_variation && is_array($values['variation'])) :
echo woocommerce_get_formatted_variation( $values['variation'] );
endif;
?>
</td>
<td class="product-price"><?php echo woocommerce_price($_product->get_price()); ?></td>
<td class="product-quantity"><div class="quantity"><input name="cart[<?php echo $cart_item_key; ?>][qty]" value="<?php echo $values['quantity']; ?>" size="4" title="Qty" class="input-text qty text" maxlength="12" /></div></td>
<td class="product-subtotal"><?php echo woocommerce_price($_product->get_price()*$values['quantity']); ?></td>
</tr>
<?php
2011-08-10 17:11:11 +00:00
endif;
endforeach;
endif;
do_action( 'woocommerce_shop_table_cart' );
?>
<tr>
<td colspan="6" class="actions">
<div class="coupon">
<label for="coupon_code"><?php _e('Coupon', 'woothemes'); ?>:</label> <input name="coupon_code" class="input-text" id="coupon_code" value="" /> <input type="submit" class="button" name="apply_coupon" value="<?php _e('Apply Coupon', 'woothemes'); ?>" />
</div>
<?php $woocommerce->nonce_field('cart') ?>
<input type="submit" class="button" name="update_cart" value="<?php _e('Update Shopping Cart', 'woothemes'); ?>" /> <a href="<?php echo $woocommerce->cart->get_checkout_url(); ?>" class="checkout-button button alt"><?php _e('Proceed to Checkout &rarr;', 'woothemes'); ?></a>
2011-08-10 17:11:11 +00:00
</td>
</tr>
</tbody>
</table>
</form>
<div class="cart-collaterals">
<?php do_action('cart-collaterals'); ?>
<div class="cart_totals">
<?php
// Hide totals if customer has set location and there are no methods going there
$available_methods = $woocommerce->shipping->get_available_shipping_methods();
if ($available_methods || !$woocommerce->customer->get_shipping_country() || !$woocommerce->shipping->enabled ) :
2011-08-10 17:11:11 +00:00
?>
<h2><?php _e('Cart Totals', 'woothemes'); ?></h2>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<th><?php _e('Subtotal', 'woothemes'); ?></th>
<td><?php echo $woocommerce->cart->get_cart_subtotal(); ?></td>
2011-08-10 17:11:11 +00:00
</tr>
<?php if ($woocommerce->cart->get_cart_shipping_total()) : ?><tr>
<th><?php _e('Shipping', 'woothemes'); ?> <small><?php echo $woocommerce->countries->shipping_to_prefix().' '.$woocommerce->countries->countries[ $woocommerce->customer->get_shipping_country() ]; ?></small></th>
<td><?php echo $woocommerce->cart->get_cart_shipping_total(); ?> <small><?php echo $woocommerce->cart->get_cart_shipping_title(); ?></small></td>
2011-08-10 17:11:11 +00:00
</tr><?php endif; ?>
<?php if ($woocommerce->cart->get_cart_tax()) : ?><tr>
<th><?php _e('Tax', 'woothemes'); ?> <?php if ($woocommerce->customer->is_customer_outside_base()) : ?><small><?php echo sprintf(__('estimated for %s', 'woothemes'), $woocommerce->countries->estimated_for_prefix() . $woocommerce->countries->countries[ $woocommerce->countries->get_base_country() ] ); ?></small><?php endif; ?></th>
2011-08-10 17:11:11 +00:00
<td><?php
echo $woocommerce->cart->get_cart_tax();
2011-08-10 17:11:11 +00:00
?></td>
</tr><?php endif; ?>
<?php if ($woocommerce->cart->get_total_discount()) : ?><tr class="discount">
2011-08-10 17:11:11 +00:00
<th><?php _e('Discount', 'woothemes'); ?></th>
<td>-<?php echo $woocommerce->cart->get_total_discount(); ?></td>
2011-08-10 17:11:11 +00:00
</tr><?php endif; ?>
<tr>
<th><strong><?php _e('Total', 'woothemes'); ?></strong></th>
<td><strong><?php echo $woocommerce->cart->get_total(); ?></strong></td>
2011-08-10 17:11:11 +00:00
</tr>
</tbody>
</table>
<?php
else :
echo '<p>'.__('Sorry, it seems that there are no available shipping methods to your location. Please contact us if you require assistance or wish to make alternate arrangements.', 'woothemes').'</p>';
endif;
?>
</div>
<?php woocommerce_shipping_calculator(); ?>
</div>
<?php
}