配送方式 - 当扁平率是隐藏的不可用本地拾取选项(Shipping methods - Local

2019-09-25 16:29发布

在此基础上的答案(下面的代码) ,我成功地可以隐藏扁平率从具体的产品类别地方交付选项可用。 这是工作完美。

问题: 本地皮卡选项不适用于特定类别。

我怎样才能提供给这个特殊类别本地拾取选项?

这是我使用的代码:

function custom_shipping_methods( $rates ){

    // Define/replace here your correct category slug (!)
    $cat_slug = 'your_category_slug';
    $prod_cat = false;

    // Going through each item in cart to see if there is anyone of your category        
    foreach ( WC()->cart->get_cart() as $values ) {
        $item = $values['data'];

        if ( has_term( $cat_slug, 'product_cat', $item->id ) )
            $prod_cat = true;
    }

    $rates_arr = array();

    if ( $prod_cat ) {
        foreach($rates as $key => $rate) {
            if ('free_shipping' === $rate->method_id || 'local_pickup' === $rate->method_id || 'local_delivery' === $rate->method_id) {
                $rates_arr[ $rate_id ] = $rate;
                break;
            }
        }
    }
    return !empty( $rates_arr ) ? $rates_arr : $rates;
}
add_filter( 'woocommerce_package_rates', 'custom_shipping_methods', 100);

还有一两件事:有没有可能以示对因位置特殊类别的局部输送本地拾取

目前在我的商店当地发货收货的也仅限于一个位置。

Answer 1:

建议: 只针对WooCommerce版本2.6.x的(对于WC增加兼容性3+)

许多测试之后......你需要改变你的代码2的小东西:

add_filter( 'woocommerce_package_rates', 'custom_shipping_methods', 100, 2 );
function custom_shipping_methods( $rates, $package ){

    // Define/replace here your correct category slug (!)
    $cat_slug = 'posters';
    $prod_cat = false;

    // Going through each item in cart to see if there is anyone of your category
    foreach ( WC()->cart->get_cart() as $values ) {
        $product = $values['data'];

        // compatibility with WC +3
        $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

        if ( has_term( $cat_slug, 'product_cat', $product_id ) )
            $prod_cat = true;
    }

    $rates_arr = array();

    if ( $prod_cat ) {
        foreach($rates as $rate_id => $rate) { // <== There was a mistake here

            if ('free_shipping' === $rate->method_id || 'local_pickup' === $rate->method_id || 'local_delivery' === $rate->method_id) {
                $rates_arr[ $rate_id ] = $rate;
                // break; // <========= Removed this to avoid stoping the loop
            }
        }
    }
    return !empty( $rates_arr ) ? $rates_arr : $rates;
}

有2个失误:

  • 一个与我有更换坏的变量名foreach循环。
  • 删除break; 避免回采foreach循环时一个条件相匹配。

这一代码进入您的当前儿童主题或主题的function.php文件。

此代码测试和功能齐全的 (如果你设置了正确的航运区,将工作)。

您将需要刷新航运缓存数据:禁用,保存并启用,保存当前航运区相关的运输方式,在woocommerce送货设置。


参考文献:

  • 隐藏其他的运输方式后免费运送可用
  • WooCommerce -隐藏其他的运输方式后免费运送可用


文章来源: Shipping methods - Local Pickup option not available when Flat Rate is hidden