如果某些产品在购物车WooCommerce中,则有条件发货选项

时间:2020-02-27 作者:Winch

在WooCommerce中,当某些项目添加到购物车时,我试图禁用免费送货。我想出了一个解决方案,并在下面的帖子中分享了它。

1 个回复
SO网友:Winch

我的解决方案基于以下源代码片段:https://www.xadapter.com/woocommerce-hide-shipping-methods-if-items-of-specific-shipping-class-is-not-in-cart/

我在WooCommerce中创建了一个新的Shipping类,名为“no free Shipping”(slug很重要,因为如果您有不同的东西,必须在代码中替换它)

在函数中。php文件在WordPress主题中,添加以下代码:

add_filter(\'woocommerce_package_rates\', \'xa_hide_shipping_method_when_shipping_class_product_is_in_cart\', 10, 2);
function xa_hide_shipping_method_when_shipping_class_product_is_in_cart($available_shipping_methods, $package){
// Shipping class IDs that need the method removed

$shipping_classes = array(
    \'no-free-shipping\',         
);
$shipping_services_to_hide = array(
    \'free_shipping:1\'
);
$shipping_class_exists = false;
foreach(WC()->cart->cart_contents as $key => $values) {
    if (in_array($values[\'data\']->get_shipping_class() , $shipping_classes)) {
        $shipping_class_exists = true;
        break;
    }
}

// Negation of shipping class exists.
if($shipping_class_exists) {
    foreach($shipping_services_to_hide as & $value) {
        //echo var_dump($available_shipping_methods);
        unset($available_shipping_methods[$value]);
    }
}

return $available_shipping_methods;
}
我最大的问题是确定我的“免费送货”选项的名称,因为WooCommerce中没有明确定义的slug。为了找到这个,我使用了注释掉的

echo var_dump($available_shipping_methods);
打印出发货选项的名称(在我的示例中为“free\\u shipping:1”),我将其包含在代码中以使其正常工作。

现在,如果将任何具有“no free shipping”装运类别的产品添加到购物车中,则将删除“free shipping”选项。

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。