php Woocommerce运输用例

qvtsj1bj  于 2023-01-12  发布在  PHP
关注(0)|答案(2)|浏览(161)

我有一个网站的用例,但我不知道如何配置WooCommerce Shipping来做我想做的事情。
关于该商店的运输:

  • 有些产品只能在本地交付(免费)。如果有人在定义的区域之外,应该有消息通知他这是唯一的本地产品。
  • 其他产品可以在当地(免费)或外部地区交付。
  • 在这些可以交付到外部区域的产品中,不同的交付费率适用(产品A为+25美元,产品B为+30美元,产品C为+10美元......)

我设置了两个运输区域:

  • 本地(只有一个邮政编码列表)-〉免费率,
  • 区域外(任何地方)-〉放一堆职业,比如+10,+20,+25......并给他们打分

我有两个主要问题:
1.我不知道如何强迫一些产品只在本地生产。
1.当做上述设置,产品是在外面的地区,我给了航运类不显示在当地,如果有人试图结帐从当地邮政编码。
如何解决这个问题?

pwuypxnk

pwuypxnk1#

这些都是有争议的,但你不需要编码来完成,因为我认为你已经在那里了。
我设置了两个运输区域:
本地(只有一个邮政编码列表)-〉免费价格,外部区域(任何地方)-〉把一堆类,如+10,+20,+25 ...并给他们的价格
在中,LocalEverywhere应具有相同的发运分类,但应具有不同的值。
让我们说,在你的设置是这样的

装运区〉本地

    • 区域**:添加邮政编码或地区列表。
    • 运输方式**:添加统一费率方法

统一费率设置:

航运区〉无处不在

    • 区域**:添加邮政编码或地区列表,或将其保留为空。
    • 运输方式**:添加统一费率方法

统一费率设置:

我有两个主要问题:
1.我不知道如何强迫一些产品只在本地生产。
1.当做上述设置,产品是在外面的地区,我给了航运类不显示在当地,如果有人试图结帐从当地邮政编码。
1.你不需要。只要为产品添加正确的运输类,运输就会自动完成。
1.这就是你失去我的地方。这里是我的购物车截图。本地vs各地。
当地

无处不在

以上两张图片展示了具有"A类"运输类别的产品。

ctehm74n

ctehm74n2#

由于您已经启用了免费本地运费率,您将需要设置它的代码如下。它可以是一个"免费送货"方法或"本地提货"方法(设置为0成本和无税)。
您还必须在函数中设置需要启用此发货方式的产品ID数组(隐藏所有其他产品ID)。

add_filter( 'woocommerce_package_rates', 'conditionally_hide_shipping_methods', 10, 2 );
function conditionally_hide_shipping_methods( $rates, $package ) {

    // Set HERE the shipping method to use: 
    // It can be 'free_shipping' or 'local_pickup' (set with 0 cost and no tax) 
    $shipping_method_id = 'local_pickup';

    // Set HERE your "LOCAL free" product IDs
    $local_free_ids = array( 40, 37 );

    $found = false;

    foreach( WC()->cart->get_cart() as $cart_item  ) {
        if( in_array($cart_item[ 'product_id' ], $local_free_ids) ) { // <== ID OF MY SHIPPING_CLASS
            $found = true;
            break; // Stop the loop
        }
    }
    // If on of this product Ids are in cart we hide all other shipping methods
    if ( $found ){
        $local_free = array();
        foreach ( $rates as $rate_id => $rate ) {
            if ( $shipping_method_id === $rate->method_id ) {
                $local_free[ $rate_id ] = $rate;
                break;
            }
        }
        return ! empty( $local_free ) ? $local_free : $rates;
    } else {
        return $rates;
    }
}
  • 代码在您的活动子主题(或主题)的function.php文件或任何插件文件中。*
    • 有时需要刷新发货缓存:**

1)首先您的购物车是空的。
2)代码已经保存在function.php文件中。
3)进入一个运输区域,禁用一个"统一费率"(例如) 并"保存"。然后重新启用该"统一费率"并"保存"。操作完成。
基于:WooCommerce - Hide other shipping methods when FREE SHIPPING is available
要仅通知本地产品的客户,应在新问题中询问此问题...

相关问题