2011-08-10 17:11:11 +00:00
< ? php
/**
* Free Shipping Method
*
* A simple shipping method for free shipping
*
* @ class free_shipping
* @ package WooCommerce
* @ category Shipping
* @ author WooThemes
*/
class free_shipping extends woocommerce_shipping_method {
2011-09-06 11:18:22 +00:00
function __construct () {
2011-08-10 17:11:11 +00:00
$this -> id = 'free_shipping' ;
2012-01-05 11:31:22 +00:00
$this -> method_title = __ ( 'Free shipping' , 'woocommerce' );
2011-11-28 15:50:19 +00:00
// Load the form fields.
$this -> init_form_fields ();
// Load the settings.
$this -> init_settings ();
// Define user set variables
$this -> enabled = $this -> settings [ 'enabled' ];
$this -> title = $this -> settings [ 'title' ];
$this -> min_amount = $this -> settings [ 'min_amount' ];
$this -> availability = $this -> settings [ 'availability' ];
$this -> countries = $this -> settings [ 'countries' ];
2011-11-28 16:10:31 +00:00
$this -> requires_coupon = $this -> settings [ 'requires_coupon' ];
2011-08-10 17:11:11 +00:00
2011-11-28 15:50:19 +00:00
// Actions
2011-09-15 16:37:38 +00:00
add_action ( 'woocommerce_update_options_shipping_methods' , array ( & $this , 'process_admin_options' ));
2011-08-10 17:11:11 +00:00
}
2011-11-28 15:50:19 +00:00
/**
* Initialise Gateway Settings Form Fields
*/
function init_form_fields () {
global $woocommerce ;
2011-08-10 17:11:11 +00:00
2011-11-28 15:50:19 +00:00
$this -> form_fields = array (
'enabled' => array (
2012-01-05 11:31:22 +00:00
'title' => __ ( 'Enable/Disable' , 'woocommerce' ),
2011-11-28 15:50:19 +00:00
'type' => 'checkbox' ,
2012-01-05 11:31:22 +00:00
'label' => __ ( 'Enable Free Shipping' , 'woocommerce' ),
2011-11-28 15:50:19 +00:00
'default' => 'yes'
),
'title' => array (
2012-01-05 11:31:22 +00:00
'title' => __ ( 'Method Title' , 'woocommerce' ),
2011-11-28 15:50:19 +00:00
'type' => 'text' ,
2012-01-05 11:31:22 +00:00
'description' => __ ( 'This controls the title which the user sees during checkout.' , 'woocommerce' ),
'default' => __ ( 'Free Shipping' , 'woocommerce' )
2011-11-28 15:50:19 +00:00
),
'min_amount' => array (
2012-01-05 11:31:22 +00:00
'title' => __ ( 'Minimum Order Amount' , 'woocommerce' ),
2011-11-28 15:50:19 +00:00
'type' => 'text' ,
2012-01-05 11:31:22 +00:00
'description' => __ ( 'Users will need to spend this amount to get free shipping. Leave blank to disable.' , 'woocommerce' ),
2011-11-28 15:50:19 +00:00
'default' => ''
),
2011-11-28 16:10:31 +00:00
'requires_coupon' => array (
2012-01-05 11:31:22 +00:00
'title' => __ ( 'Coupon' , 'woocommerce' ),
2011-11-28 16:10:31 +00:00
'type' => 'checkbox' ,
2012-01-05 11:31:22 +00:00
'label' => __ ( 'Free shipping requires a free shipping coupon' , 'woocommerce' ),
2012-01-06 11:36:19 +00:00
'description' => __ ( 'Users will need to enter a valid free shipping coupon code to use this method. If a coupon is used, the minimum order amount will be ignored.' , 'woocommerce' ),
2011-11-28 16:10:31 +00:00
'default' => 'no'
),
2011-11-28 15:50:19 +00:00
'availability' => array (
2012-01-05 11:31:22 +00:00
'title' => __ ( 'Method availability' , 'woocommerce' ),
2011-11-28 15:50:19 +00:00
'type' => 'select' ,
'default' => 'all' ,
'class' => 'availability' ,
'options' => array (
2012-01-05 11:31:22 +00:00
'all' => __ ( 'All allowed countries' , 'woocommerce' ),
'specific' => __ ( 'Specific Countries' , 'woocommerce' )
2011-11-28 15:50:19 +00:00
)
),
'countries' => array (
2012-01-05 11:31:22 +00:00
'title' => __ ( 'Specific Countries' , 'woocommerce' ),
2011-11-28 15:50:19 +00:00
'type' => 'multiselect' ,
'class' => 'chosen_select' ,
2011-12-07 19:45:29 +00:00
'css' => 'width: 450px;' ,
2011-11-28 15:50:19 +00:00
'default' => '' ,
'options' => $woocommerce -> countries -> countries
)
);
2011-08-10 17:11:11 +00:00
2011-11-28 15:50:19 +00:00
} // End init_form_fields()
/**
* Admin Panel Options
* - Options for bits like 'title' and availability on a country - by - country basis
*
* @ since 1.0 . 0
*/
public function admin_options () {
2011-08-10 17:11:11 +00:00
?>
2012-01-05 11:31:22 +00:00
< h3 >< ? php _e ( 'Free Shipping' , 'woocommerce' ); ?> </h3>
< p >< ? php _e ( 'Free Shipping - does what it says on the tin.' , 'woocommerce' ); ?> </p>
2011-08-13 13:57:48 +00:00
< table class = " form-table " >
2011-08-10 17:11:11 +00:00
< ? php
2011-11-28 15:50:19 +00:00
// Generate the HTML For the settings form.
$this -> generate_settings_html ();
?>
</ table ><!--/. form - table -->
< ? php
} // End admin_options()
2011-08-10 17:11:11 +00:00
2011-11-28 16:10:31 +00:00
function is_available () {
global $woocommerce ;
if ( $this -> enabled == " no " ) return false ;
2011-12-06 14:30:25 +00:00
2011-11-28 16:10:31 +00:00
$ship_to_countries = '' ;
if ( $this -> availability == 'specific' ) :
$ship_to_countries = $this -> countries ;
else :
if ( get_option ( 'woocommerce_allowed_countries' ) == 'specific' ) :
$ship_to_countries = get_option ( 'woocommerce_specific_allowed_countries' );
endif ;
endif ;
if ( is_array ( $ship_to_countries )) :
if ( ! in_array ( $woocommerce -> customer -> get_shipping_country (), $ship_to_countries )) return false ;
endif ;
2012-01-06 11:36:19 +00:00
2011-11-28 16:10:31 +00:00
if ( $this -> requires_coupon == " yes " ) :
2012-01-02 12:48:56 +00:00
2011-11-28 16:10:31 +00:00
if ( $woocommerce -> cart -> applied_coupons ) : foreach ( $woocommerce -> cart -> applied_coupons as $code ) :
$coupon = & new woocommerce_coupon ( $code );
if ( $coupon -> enable_free_shipping () ) :
return true ;
endif ;
endforeach ; endif ;
return false ;
endif ;
2012-01-06 11:36:19 +00:00
if ( isset ( $woocommerce -> cart -> cart_contents_total )) :
if ( $woocommerce -> cart -> prices_include_tax ) :
$total = $woocommerce -> cart -> tax_total + $woocommerce -> cart -> cart_contents_total ;
else :
$total = $woocommerce -> cart -> cart_contents_total ;
endif ;
if ( isset ( $this -> min_amount ) && $this -> min_amount && $this -> min_amount > $total ) return false ;
endif ;
2011-11-28 16:10:31 +00:00
return true ;
}
2011-11-28 15:50:19 +00:00
function calculate_shipping () {
2012-01-03 19:07:32 +00:00
$args = array (
2012-01-04 16:24:26 +00:00
'id' => $this -> id ,
2012-01-03 19:07:32 +00:00
'label' => $this -> title ,
2012-01-04 16:24:26 +00:00
'cost' => 0 ,
'taxes' => false
2012-01-03 19:07:32 +00:00
);
$this -> add_rate ( $args );
2011-08-10 17:11:11 +00:00
}
}
function add_free_shipping_method ( $methods ) {
$methods [] = 'free_shipping' ; return $methods ;
}
add_filter ( 'woocommerce_shipping_methods' , 'add_free_shipping_method' );