如何在我的某些woocommerce产品中停用运费

时间:2016-12-03 15:07:48

标签: wordpress woocommerce

我有一个WooCommerce在线商店,提供大多数产品的运送。部分产品适合当地皮卡。我已尝试在成本等于零的运输区域上设置课程,并在产品上分配课程。但到目前为止,结帐仍然显示运费。有什么方法可以让某些产品没有运费吗?

2 个答案:

答案 0 :(得分:1)

如果您要搜索插件解决方案,请尝试WooCommerce Conditional Shipping and Payments。通过使用此插件,您可以添加对某些产品或产品类别的限制。

答案 1 :(得分:1)

您可能希望查看woocommerce_package_rates过滤器,该过滤器允许您过滤客户可用的一组送货选项。一个例子是这样的:

<?php
// add this snippet to functions.php:
add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
    // examine $package for products. this could be a whitelist of specific 
    // products that you wish to be treated in a special manner...
    $special_ids             = array( 1, 2, 3, 4, 5 );
    $special_product_present = false;
    foreach ( $package['contents'] as $line_item ) {
        if ( in_array( $line_item['product_id'], $special_ids ) ) {
            $special_product_present = true;
        }
    }

    $rates = array_filter( $rates, function ( $r ) use ( $special_product_present ) {
        // do some logic here to return true (for rates that you wish to be displayed), or false.
        // example: only allow shipping methods that start with "local"
        if ( $special_product_present ) {
            return preg_match( '/^local/', strtolower( $r->label ) );
        } else {
            return true;
        }
    } );

    return $rates;
}, 10, 2 );

blog post here使用此挂钩显示了该想法的一些变体,包括如何根据购物车价值,客户所在国家/地区,购物车中的商品数量等自定义可用费率。这里是源代码: https://github.com/woocommerce/woocommerce/blob/v2.2.3/includes/class-wc-shipping.php#L366