【问题标题】:Woocommerce shipping use caseWoocommerce 运输用例
【发布时间】:2018-01-31 04:06:32
【问题描述】:

我有一个网站用例,但我不知道如何配置 WooCommerce Shipping 来做我想做的事。

关于该商店的送货:

  • 有些产品只能在本地交付(免费)。如果有人在指定区域之外,则应有一条消息通知他这是唯一的本地产品。
  • 其他产品可在本地(免费)或外地配送。
  • 在这些可以外送的产品中,不同的运费适用(产品 A +$25,产品 B +$30,产品 C +$10...)

我设置了两个配送区:

  • 本地(仅邮政编码列表)-> 免费费率,
  • Outside Area (everywhere) -> 设置一堆职业,例如 +10 , +20 , +25 ... 并给他们评分

我这里有两个主要问题:

  1. 我不知道如何强制某些产品仅限本地。
  2. 在进行上述设置时,如果有人尝试从本地邮政编码结帐,那么在我为其指定配送类别的外部区域中的产品不会在本地显示。

你知道如何解决这个问题吗?

【问题讨论】:

  • 嗨 Loic,我仍在测试你的脚本,因为我正在稍微调整它以匹配我的用例。完成后我会尽快接受!我问了这个新问题,因为这里没有回答(你也建议过)。谢谢!

标签: php wordpress woocommerce cart shipping


【解决方案1】:

这些有点值得商榷,但您无需编写代码即可完成此操作。我想你已经在那里了。

我设置了两个配送区:

本地(仅邮政编码列表)-> 免费费率,外部区域 (无处不在)-> 放一堆类,例如 +10 , +20 , +25 ...和 给他们费率

在您的LocalEverywhere 中应该有相同的运输类别,但应该有不同的值。

让我们说在你的设置中是这样的

配送区域 > 本地

区域区域:添加邮政编码或区域列表。
送货方式:添加统一费率方式

统一费率设置:

航运区 > 无处不在

区域:添加邮政编码或地区列表或将其留空。
送货方式:添加统一费率方式

统一费率设置:

我这里有两个主要问题:

  1. 我不知道如何强制某些产品仅限本地。
  2. 在进行上述设置时,如果我为其指定了配送类别,则位于外部区域的产品未在本地显示 有人正在尝试从本地邮政编码结帐。
  1. 你没有。只需为产品添加正确的运输类别,运输就会自行完成。
  2. 这就是你失去我的地方。这是我的购物车的屏幕截图。本地与无处不在。

本地

无处不在

以上两张图片展示了具有“A 类”运输等级的产品。

【讨论】:

  • 您也可以在您的配送区域中将统一费率命名为 > 本地为“免费配送”,以便在购物车上显示为免费配送。
  • 另外,请注意,您不应该对您的运输方式收取费用。仅适用于航运类。这样,如果产品没有运输等级,则会留下一个注释 There are no shipping methods available. Please double check your address, or contact us if you need any help.。您也可以将其用于仅限本地产品。可能会添加“Local A”、“Local B”、“Local C”等类...并像 A、B、C 类等运输类一样做同样的事情。
  • 感谢您的回答。你实际上得到了我的想法。至于第 2 点,我得到的结果与您相同(请参阅下面的屏幕截图,了解可以在本地和外部区域交付的“普通”产品):imgur.com/VsstRtYimgur.com/yoXxjlB 现在,对于第 1 点,我基本上需要通知客户,如果他在外部区域,则无法交付产品。以下是“仅限本地”产品的屏幕截图。请注意,即使客户在外部区域,他仍然可以结账。 imgur.com/VjsXqXNimgur.com/J1X3Njo
  • P.S:我使用“仅限本地”运输类别来区分此产品。它在“本地”运输区域中设置为 0 美元。并且在“外部区域”航运区不适用。
  • “另外,请注意,您不应该在运输方式上应用成本。仅在运输类别上。”这就是我一直做错的事情。我将默认成本设置为 0。我将其留空..现在所有场景都运行良好!!!非常感谢@Reigel !!
【解决方案2】:

由于您已启用免费本地运费,您需要将其设置为以下代码。可以是“包邮”方式,也可以是“本地自取”方式(设置为0成本,不含税)。

您还必须在函数中设置需要启用此运输方式的产品 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


要仅通知客户购买本地产品,应在新问题中提出此问题...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2015-01-03
    相关资源
    最近更新 更多