在Woocommerce中为所选产品禁用特定的统一费率送货方式

时间:2018-06-20 14:38:26

标签: php wordpress woocommerce cart shipping

在Woocommerce中,如何为特定的选定产品动态关闭一个特定的“统一费率”?

例如
我有三种不同的固定费率选择。
可以使用选项1、2和3发送产品A。
可以使用选项1和2发送产品B。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这可以通过以下功能代码完成,您将在其中定义要禁用的相关产品ID和运输方式ID。

要找出正确的送货方式ID,只需使用浏览器开发工具检查“值”参数下相应的“固定费率”单选按钮即可。

您可能必须在常规运输设置中的“ 运输选项”标签下“启用调试模式” ,才能禁用运输缓存。

代码:

add_filter('woocommerce_package_rates', 'product_hide_shipping_method', 10, 2);
function product_hide_shipping_method( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    // HERE set your Shipping Method ID to be removed
    $shipping_method_id = 'flat_rate:12';

    // HERE set your targeted product ID
    $product_id = 37;

    $found = false;

    // Loop through cart items and checking for the specific product ID
    foreach( $package['contents'] as $cart_item ) {
        if( $cart_item['data']->get_id() == $product_id )
            $found = true;
    }

    if( $found ){
        // Loop through available shipping methods
        foreach ( $rates as $rate_key => $rate ){
            // Remove the specific shipping method
            if( $shipping_method_id === $rate->id  )
                unset($rates[$rate->id]);
        }
    }
    return $rates;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。

  

不要忘记在运输设置中重新启用“启用调试模式” 选项。


对于包含多个产品ID的数组,请替换以下行:

// HERE set your targeted product ID
$product_id = 37; 

具有:

// Define your targeted product IDs
$product_ids = array(37, 39, 52, 58);

并替换行:

if( $cart_item['data']->get_id() == $product_id )

具有:

if( in_array( $cart_item['data']->get_id(), $product_ids ) )

可变产品的最新信息:如果您希望处理父可变产品ID而不是产品变体ID,请替换代码:

$cart_item['data']->get_id()

具有:

$cart_item['product_id']