1 回答

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
更新- 請嘗試以下操作(代碼已注釋):
// SETTINGS BELOW: Custom function that handle your settings
function custom_shipping_settings() {
return array(
'product_ids' => array(2267), // Define the products that need to be in a separated shipping package (local pickup)
'allowed_zones_ids' => array(8), // Define the allowed zones IDs
);
}
// Splitting cart items into 2 shipping packages
add_filter( 'woocommerce_cart_shipping_packages', 'split_shipping_packages' );
function split_shipping_packages( $packages ) {
extract(custom_shipping_settings()); // Load and extract settings
$customer = WC()->customer;
$destination = array(
'country' => $customer->get_shipping_country(),
'state' => $customer->get_shipping_state(),
'postcode' => $customer->get_shipping_postcode(),
'city' => $customer->get_shipping_city(),
'address' => $customer->get_shipping_address(),
'address_2' => $customer->get_shipping_address_2()
);
$package_dest = array( 'destination' => $destination );
$zone = wc_get_shipping_zone( $package_dest );
if ( ! in_array( $zone->get_id(), $allowed_zones_ids ) ) {
// Reset packages and initialize variables
$packages = $splitted_cart_items = array();
// Loop through cart items
foreach ( WC()->cart->get_cart() as $item_key => $item ) {
if ( is_a($item['data'], 'WC_Product') && $item['data']->needs_shipping() ) {
if ( ! array_intersect( array($item['product_id'], $item['variation_id']), $product_ids ) ) {
$splitted_cart_items[0][$item_key] = $item; // Regular items
} else {
$splitted_cart_items[1][$item_key] = $item; // Special separated items
}
}
}
if ( count($splitted_cart_items) < 2 )
return $packages;
// Loop through spitted cart items
foreach ( $splitted_cart_items as $key => $items ) {
// Set each cart items group in a shipping package
$packages[$key] = array(
'contents' => $items,
'contents_cost' => array_sum( wp_list_pluck( $items, 'line_total' ) ),
'applied_coupons' => WC()->cart->get_applied_coupons(),
'user' => array( 'ID' => get_current_user_id() ),
'destination' => $destination,
);
}
}
return $packages;
}
// Force local pickup for specific splitted shipping package (for the defined products)
add_filter( 'woocommerce_package_rates', 'filter_wc_package_rates', 10, 2 );
function filter_wc_package_rates( $rates, $package ) {
extract(custom_shipping_settings()); // Load and extract settings
$zone = wc_get_shipping_zone( $package ); // Get current shipping zone
$found = false;
// For all others shipping zones than allowed zones
if ( ! in_array( $zone->get_id(), $allowed_zones_ids ) ) {
// Loop through cart items for current shipping package
foreach( $package['contents'] as $item ) {
// Look for defined specific product Ids
if ( array_intersect( array($item['product_id'], $item['variation_id']), $product_ids ) ) {
$found = true; // Flag as found
break; // Stop the loop
}
}
// If any defined product is in cart
if ( $found ) {
// Loop through shipping rates
foreach ( $rates as $rate_key => $rate ) {
// Hide all shipping methods keeping "Local pickup"
if ( 'local_pickup' !== $rate->method_id ) {
unset( $rates[$rate_key] );
}
}
}
}
return $rates;
}
代碼位于活動(dòng)子主題(或活動(dòng)主題)的functions.php 文件中。經(jīng)過測試并有效。
刷新運(yùn)輸緩存:
此代碼已保存在您的functions.php 文件中。
在運(yùn)輸區(qū)域設(shè)置中,禁用/保存任何運(yùn)輸方式,然后啟用返回/保存。
你已經(jīng)完成了,你可以測試它。
- 1 回答
- 0 關(guān)注
- 105 瀏覽
添加回答
舉報(bào)