-
-
Save boywondercreative/6e258543aeb1c8806b928ffca3e7d701 to your computer and use it in GitHub Desktop.
WooCommerce - Split shipping class items into a new package and limit shipping methods
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
/** | |
* This function loops over cart items, and moves any item with shipping class 'special-class' into a new package. | |
* The new package in this example only takes flat rate shipping. | |
*/ | |
function split_special_shipping_class_items( $packages ) { | |
$found_item = false; | |
$special_class = 'special-class'; // edit this with the slug of your shippig class | |
$new_package = current( $packages ); | |
$new_package['contents'] = array(); | |
$new_package['contents_cost'] = 0; | |
$new_package['applied_coupons'] = array(); | |
$new_package['ship_via'] = array( 'flat_rate' ); // Only allow flat rate for items in special class | |
foreach ( WC()->cart->get_cart() as $item_key => $item ) { | |
// Is the product in the special class? | |
if ( $item['data']->needs_shipping() && $special_class === $item['data']->get_shipping_class() ) { | |
$found_item = true; | |
$new_package['contents'][ $item_key ] = $item; | |
$new_package['contents_cost'] += $item['line_total']; | |
// Remove from original package | |
$packages[0]['contents_cost'] = $packages[0]['contents_cost'] - $item['line_total']; | |
unset( $packages[0]['contents'][ $item_key ] ); | |
// If there are no items left in the previous package, remove it completely. | |
if ( empty( $packages[0]['contents'] ) ) { | |
unset( $packages[0] ); | |
} | |
} | |
} | |
if ( $found_item ) { | |
$packages[] = $new_package; | |
} | |
return $packages; | |
} | |
// Hook into shipping packages filter | |
add_filter( 'woocommerce_cart_shipping_packages', 'split_special_shipping_class_items' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment