2013-07-26 14:36:28 +00:00
< ? php
/**
* WooCommerce Shipping Settings
*
2014-08-31 08:22:03 +00:00
* @ author WooThemes
* @ category Admin
* @ package WooCommerce / Admin
2013-07-26 14:36:28 +00:00
* @ version 2.1 . 0
*/
2014-09-20 19:55:47 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
exit ; // Exit if accessed directly
}
2013-07-26 14:36:28 +00:00
if ( ! class_exists ( 'WC_Settings_Shipping' ) ) :
/**
* WC_Settings_Shipping
*/
class WC_Settings_Shipping extends WC_Settings_Page {
/**
* Constructor .
*/
public function __construct () {
$this -> id = 'shipping' ;
$this -> label = __ ( 'Shipping' , 'woocommerce' );
add_filter ( 'woocommerce_settings_tabs_array' , array ( $this , 'add_settings_page' ), 20 );
add_action ( 'woocommerce_sections_' . $this -> id , array ( $this , 'output_sections' ) );
add_action ( 'woocommerce_settings_' . $this -> id , array ( $this , 'output' ) );
add_action ( 'woocommerce_admin_field_shipping_methods' , array ( $this , 'shipping_methods_setting' ) );
add_action ( 'woocommerce_settings_save_' . $this -> id , array ( $this , 'save' ) );
}
/**
* Get sections
*
* @ return array
*/
public function get_sections () {
$sections = array (
2014-08-31 08:22:03 +00:00
'' => __ ( 'Shipping Options' , 'woocommerce' )
2013-07-26 14:36:28 +00:00
);
2015-01-23 13:05:35 +00:00
if ( ! defined ( 'WC_INSTALLING' ) ) {
// Load shipping methods so we can show any global options they may have
$shipping_methods = WC () -> shipping -> load_shipping_methods ();
2013-07-26 14:36:28 +00:00
2015-01-23 13:05:35 +00:00
foreach ( $shipping_methods as $method ) {
if ( ! $method -> has_settings () ) {
continue ;
}
$title = empty ( $method -> method_title ) ? ucfirst ( $method -> id ) : $method -> method_title ;
$sections [ strtolower ( get_class ( $method ) ) ] = esc_html ( $title );
}
2013-07-26 14:36:28 +00:00
}
2014-02-17 14:30:37 +00:00
return apply_filters ( 'woocommerce_get_sections_' . $this -> id , $sections );
2013-07-26 14:36:28 +00:00
}
/**
* Get settings array
*
* @ return array
*/
public function get_settings () {
2014-08-31 08:22:03 +00:00
2014-09-12 11:20:06 +00:00
$settings = apply_filters ( 'woocommerce_shipping_settings' , array (
2013-07-26 14:36:28 +00:00
array ( 'title' => __ ( 'Shipping Options' , 'woocommerce' ), 'type' => 'title' , 'id' => 'shipping_options' ),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Shipping Calculations' , 'woocommerce' ),
'desc' => __ ( 'Enable shipping' , 'woocommerce' ),
'id' => 'woocommerce_calc_shipping' ,
2015-04-29 13:55:12 +00:00
'default' => 'no' ,
2014-08-31 08:22:03 +00:00
'type' => 'checkbox' ,
'checkboxgroup' => 'start'
2013-07-26 14:36:28 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'desc' => __ ( 'Enable the shipping calculator on the cart page' , 'woocommerce' ),
'id' => 'woocommerce_enable_shipping_calc' ,
'default' => 'yes' ,
'type' => 'checkbox' ,
'checkboxgroup' => '' ,
2013-07-26 14:36:28 +00:00
'autoload' => false
),
array (
2014-08-31 08:22:03 +00:00
'desc' => __ ( 'Hide shipping costs until an address is entered' , 'woocommerce' ),
'id' => 'woocommerce_shipping_cost_requires_address' ,
'default' => 'no' ,
'type' => 'checkbox' ,
'checkboxgroup' => 'end' ,
2013-07-26 14:36:28 +00:00
'autoload' => false
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Shipping Display Mode' , 'woocommerce' ),
'desc' => __ ( 'This controls how multiple shipping methods are displayed on the frontend.' , 'woocommerce' ),
'id' => 'woocommerce_shipping_method_format' ,
'default' => '' ,
'type' => 'radio' ,
'options' => array (
2014-04-08 15:28:27 +00:00
'' => __ ( 'Display shipping methods with "radio" buttons' , 'woocommerce' ),
'select' => __ ( 'Display shipping methods in a dropdown' , 'woocommerce' ),
2013-07-26 14:36:28 +00:00
),
2014-04-08 15:28:27 +00:00
'desc_tip' => true ,
'autoload' => false
2013-07-26 14:36:28 +00:00
),
array (
2014-04-08 15:28:27 +00:00
'title' => __ ( 'Shipping Destination' , 'woocommerce' ),
'desc' => __ ( 'This controls which shipping address is used by default.' , 'woocommerce' ),
2014-04-08 15:29:29 +00:00
'id' => 'woocommerce_ship_to_destination' ,
2015-01-06 17:39:09 +00:00
'default' => 'billing' ,
2014-04-08 15:28:27 +00:00
'type' => 'radio' ,
'options' => array (
2014-04-08 15:29:29 +00:00
'shipping' => __ ( 'Default to shipping address' , 'woocommerce' ),
2014-04-08 15:28:27 +00:00
'billing' => __ ( 'Default to billing address' , 'woocommerce' ),
2015-06-16 13:51:36 +00:00
'billing_only' => __ ( 'Only ship to the customer\'s billing address' , 'woocommerce' ),
2014-04-08 15:28:27 +00:00
),
2013-08-02 15:54:28 +00:00
'autoload' => false ,
2014-04-08 15:28:27 +00:00
'desc_tip' => true ,
2013-08-02 15:54:28 +00:00
'show_if_checked' => 'option' ,
2013-07-26 14:36:28 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Restrict shipping to Location(s)' , 'woocommerce' ),
'desc' => sprintf ( __ ( 'Choose which countries you want to ship to, or choose to ship to all <a href="%s">locations you sell to</a>.' , 'woocommerce' ), admin_url ( 'admin.php?page=wc-settings&tab=general' ) ),
'id' => 'woocommerce_ship_to_countries' ,
'default' => '' ,
'type' => 'select' ,
2015-01-12 16:29:01 +00:00
'class' => 'wc-enhanced-select' ,
2014-08-31 08:22:03 +00:00
'desc_tip' => false ,
'options' => array (
2013-08-02 15:54:28 +00:00
'' => __ ( 'Ship to all countries you sell to' , 'woocommerce' ),
'all' => __ ( 'Ship to all countries' , 'woocommerce' ),
'specific' => __ ( 'Ship to specific countries only' , 'woocommerce' )
)
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Specific Countries' , 'woocommerce' ),
'desc' => '' ,
'id' => 'woocommerce_specific_ship_to_countries' ,
'css' => '' ,
'default' => '' ,
'type' => 'multi_select_countries'
2013-07-26 14:36:28 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'type' => 'shipping_methods' ,
2013-07-26 14:36:28 +00:00
),
array ( 'type' => 'sectionend' , 'id' => 'shipping_options' ),
2014-09-12 11:20:06 +00:00
) );
return apply_filters ( 'woocommerce_get_settings_' . $this -> id , $settings );
2013-07-26 14:36:28 +00:00
}
/**
* Output the settings
*/
public function output () {
global $current_section ;
// Load shipping methods so we can show any global options they may have
$shipping_methods = WC () -> shipping -> load_shipping_methods ();
if ( $current_section ) {
2014-08-31 08:22:03 +00:00
2013-07-26 14:36:28 +00:00
foreach ( $shipping_methods as $method ) {
2014-08-31 08:22:03 +00:00
2013-08-08 11:38:20 +00:00
if ( strtolower ( get_class ( $method ) ) == strtolower ( $current_section ) && $method -> has_settings () ) {
2013-07-26 14:36:28 +00:00
$method -> admin_options ();
break ;
}
}
} else {
$settings = $this -> get_settings ();
WC_Admin_Settings :: output_fields ( $settings );
}
}
/**
* Output shipping method settings .
*/
public function shipping_methods_setting () {
2015-04-13 14:32:54 +00:00
$selection_priority = get_option ( 'woocommerce_shipping_method_selection_priority' , array () );
2013-07-26 14:36:28 +00:00
?>
< tr valign = " top " >
< th scope = " row " class = " titledesc " >< ? php _e ( 'Shipping Methods' , 'woocommerce' ) ?> </th>
2014-08-31 08:22:03 +00:00
< td class = " forminp " >
2015-04-13 14:32:54 +00:00
< table class = " wc_shipping widefat wp-list-table " cellspacing = " 0 " >
2013-07-26 14:36:28 +00:00
< thead >
< tr >
2015-04-13 14:32:54 +00:00
< th class = " sort " >& nbsp ; </ th >
2013-09-09 16:15:58 +00:00
< th class = " name " >< ? php _e ( 'Name' , 'woocommerce' ); ?> </th>
< th class = " id " >< ? php _e ( 'ID' , 'woocommerce' ); ?> </th>
2015-04-13 14:32:54 +00:00
< th class = " status " >< ? php _e ( 'Enabled' , 'woocommerce' ); ?> </th>
< th class = " priority " >< ? php _e ( 'Selection Priority' , 'woocommerce' ); ?> <span class="tips" data-tip="<?php echo esc_attr( __( 'Available methods will be chosen by default in this order. If multiple methods have the same priority, they will be sorted by cost.', 'woocommerce' ) ); ?>">[?]</span></th>
2013-07-26 14:36:28 +00:00
</ tr >
</ thead >
< tbody >
2015-04-13 14:32:54 +00:00
< ? php foreach ( WC () -> shipping -> load_shipping_methods () as $key => $method ) : ?>
< tr >
< td width = " 1% " class = " sort " >
< input type = " hidden " name = " method_order[<?php echo esc_attr( $method->id ); ?>] " value = " <?php echo esc_attr( $method->id ); ?> " />
2014-08-31 08:22:03 +00:00
</ td >
< td class = " name " >
2015-04-13 14:32:54 +00:00
< ? php if ( $method -> has_settings ) : ?> <a href="<?php echo esc_url( admin_url( 'admin.php?page=wc-settings&tab=shipping§ion=' . strtolower( get_class( $method ) ) ) ); ?>"><?php endif; ?>
< ? php echo esc_html ( $method -> get_title () ); ?>
< ? php if ( $method -> has_settings ) : ?> </a><?php endif; ?>
2014-08-31 08:22:03 +00:00
</ td >
< td class = " id " >
2015-04-13 14:32:54 +00:00
< ? php echo esc_attr ( $method -> id ); ?>
2014-08-31 08:22:03 +00:00
</ td >
2015-04-13 14:32:54 +00:00
< td class = " status " >
< ? php if ( 'yes' === $method -> enabled ) : ?>
< span class = " status-enabled tips " data - tip = " <?php _e( 'Yes', 'woocommerce' ); ?> " >< ? php _e ( 'Yes' , 'woocommerce' ); ?> </span>
< ? php else : ?>
< span class = " na " >-</ span >
< ? php endif ; ?>
</ td >
< td width = " 1% " class = " priority " >
< input type = " number " step = " 1 " min = " 0 " name = " method_priority[<?php echo esc_attr( $method->id ); ?>] " value = " <?php echo isset( $selection_priority [ $method->id ] ) ? absint( $selection_priority [ $method->id ] ) : 1; ?> " />
</ td >
</ tr >
< ? php endforeach ; ?>
2013-07-26 14:36:28 +00:00
</ tbody >
2014-07-11 01:50:51 +00:00
< tfoot >
< tr >
2015-04-13 14:32:54 +00:00
< th >& nbsp ; </ th >
< th colspan = " 4 " >< span class = " description " >< ? php _e ( 'Drag and drop the above shipping methods to control their display order.' , 'woocommerce' ); ?> </span></th>
2014-07-11 01:50:51 +00:00
</ tr >
</ tfoot >
2013-07-26 14:36:28 +00:00
</ table >
</ td >
</ tr >
< ? php
}
/**
* Save settings
*/
public function save () {
2015-01-19 13:19:41 +00:00
global $current_section ;
2013-07-26 14:36:28 +00:00
2015-05-29 16:38:25 +00:00
$wc_shipping = WC_Shipping :: instance ();
2013-07-26 14:36:28 +00:00
2015-05-29 16:38:25 +00:00
if ( ! $current_section ) {
WC_Admin_Settings :: save_fields ( $this -> get_settings () );
$wc_shipping -> process_admin_options ();
2013-07-26 14:36:28 +00:00
2015-05-29 16:38:25 +00:00
} else {
foreach ( $wc_shipping -> get_shipping_methods () as $method_id => $method ) {
if ( $current_section === sanitize_title ( get_class ( $method ) ) ) {
do_action ( 'woocommerce_update_options_' . $this -> id . '_' . $method -> id );
}
}
2013-07-26 14:36:28 +00:00
}
2014-11-11 16:22:26 +00:00
2015-01-19 13:19:41 +00:00
// Increments the transient version to invalidate cache
WC_Cache_Helper :: get_transient_version ( 'shipping' , true );
2013-07-26 14:36:28 +00:00
}
}
endif ;
2013-08-16 11:12:47 +00:00
return new WC_Settings_Shipping ();