Skip to content

Instantly share code, notes, and snippets.

@PluginHive
Last active December 16, 2020 06:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PluginHive/a7cf9e022e34dc71c5f678d3bf7cb147 to your computer and use it in GitHub Desktop.
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/
/**
* 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