Last active
December 16, 2020 06:16
-
-
Save PluginHive/a7cf9e022e34dc71c5f678d3bf7cb147 to your computer and use it in GitHub Desktop.
Snippet to switch UPS Account Based on Shipping Class. WooCommerce UPS Shipping Plugin with Print Label - https://www.pluginhive.com/product/woocommerce-ups-shipping-plugin-with-print-label/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Snippet to switch UPS Account Based on Shipping Class | |
* Created at : 16 December 2020 | |
* PluginHive Plugins : Switch UPS Account Based on Shipping Class | |
* Gist Link : https://gist.github.com/PluginHive/a7cf9e022e34dc71c5f678d3bf7cb147 | |
**/ | |
add_filter( 'wf_ups_shipment_settings', 'ph_ups_modify_settings_datas', 10, 2 ); | |
function ph_ups_modify_settings_datas( $settings, $order ) { | |
// Add Alternative Accounts | |
$alternate_accounts = array( | |
// Shipping Class to use Alternative Account | |
'class-a' => array( | |
//Alternative Account Details | |
'shipper_number' => 'XXXXX', // UPS account number | |
'user_id' => 'XXXXXXXXX', // UPS user ID | |
'password' => 'XXXXXXXXXXX', // UPS password | |
'access_key' => 'XXXXXXXXXXXXXX', // UPS access key | |
'origin_addressline' => '420 9th Ave', // Origin address | |
'origin_postcode' => '10001', // Origin postcode | |
'origin_city' => 'New York', // Origin City | |
'origin_state' => 'NY', // Origin State | |
'origin_country' => 'US', // Origin Country | |
), | |
// Shipping Class to use Alternative Account | |
'class-b' => array( | |
//Alternative Account Details | |
'shipper_number' => '111111', // UPS account number | |
'user_id' => '11111111', // UPS user ID | |
'password' => '1111111111', // UPS password | |
'access_key' => '111111111111', // UPS access key | |
'origin_addressline' => '200 exp Ave', // Origin address | |
'origin_postcode' => '11354', // Origin postcode | |
'origin_city' => 'Queens', // Origin City | |
'origin_state' => 'NY', // Origin State | |
'origin_country' => 'US', // Origin Country | |
), | |
); | |
global $woocommerce; | |
if( !is_cart() && !is_checkout() && empty($order) ) { | |
return $settings; | |
} | |
$is_all_items_belog_shipping_class = false; | |
$selectedShippingClass = ''; | |
foreach ($alternate_accounts as $shipping_class => $alternate_account) { | |
$is_all_items_belog_shipping_class = ph_is_all_items_belong_shipping_class($shipping_class, $order); | |
if ( $is_all_items_belog_shipping_class ) { | |
$selectedShippingClass = $shipping_class; | |
break; | |
} | |
} | |
if( !$is_all_items_belog_shipping_class ) { | |
return $settings; | |
} | |
if ( !empty($selectedShippingClass) ) { | |
$settings['shipper_number'] = $alternate_accounts[$selectedShippingClass]['shipper_number']; | |
$settings['user_id'] = $alternate_accounts[$selectedShippingClass]['user_id']; | |
$settings['password'] = $alternate_accounts[$selectedShippingClass]['password']; | |
$settings['access_key'] = $alternate_accounts[$selectedShippingClass]['access_key']; | |
$settings['origin_addressline'] = $alternate_accounts[$selectedShippingClass]['origin_addressline']; | |
$settings['origin_postcode'] = $alternate_accounts[$selectedShippingClass]['origin_postcode']; | |
$settings['origin_city'] = $alternate_accounts[$selectedShippingClass]['origin_city']; | |
$settings['origin_custom_state'] = $alternate_accounts[$selectedShippingClass]['origin_state']; | |
$settings['origin_country'] = $alternate_accounts[$selectedShippingClass]['origin_country']; | |
$settings['origin_country_state'] = $settings['origin_country'].':'.$settings['origin_custom_state']; | |
} | |
return $settings; | |
} | |
function ph_is_all_items_belong_shipping_class( $shipping_class, $order='' ) { | |
if ( !is_array( $shipping_class ) ) { | |
$shipping_class = array( $shipping_class ); | |
} | |
// For Label side | |
if ( !empty($order) ) { | |
foreach ($order->get_items() as $key => $item) { | |
$product = $item->get_product(); | |
if ( in_array( $product->get_shipping_class(), $shipping_class ) ) { | |
return true; | |
} | |
} | |
//For Rate | |
}else{ | |
global $woocommerce; | |
foreach(WC()->cart->cart_contents as $key => $values) { | |
if ( in_array( $values['data']->get_shipping_class(), $shipping_class ) ) { | |
return true; | |
} | |
} | |
} | |
return false; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment