我正在尝试获取它,以便如果客户要添加优惠券代码(其中任何一个),则免费送货选项将消失,并将收取统一费用。 -您会认为这是一件容易实现的事情,将会有100多种插件和描述此操作的方式,但是我还没有找到。我不想为该插件支付89美元来做一件事
如果他们使用优惠券但消费超过$ 249,他们仍然有资格获得免费送货。我阅读了一些操作方法,但是它要求我获取POST ID,而最新的WooCommerce无法像以前一样获取该ID,我不知道运输ID,所以我很茫然这是代码< / p>
add_filter( 'woocommerce_shipping_packages', function( $packages ) {
$applied_coupons = WC()->session->get( 'applied_coupons', array() );
if ( ! empty( $applied_coupons ) ) {
$free_shipping_id = 'free_shipping:2';
unset($packages[0]['rates'][ $free_shipping_id ]);
}
return $packages;
} );
谢谢
已编辑
add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping',
10, 2 );
function coupons_removes_free_shipping( $rates, $package ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return $rates;
$min_total = 250; // Minimal subtotal allowing free shipping
// Get needed cart totals
$total_excl_tax = WC()->cart->get_total();
$discount_excl_tax = WC()->cart->get_discount_total();
// Calculating the discounted subtotal including taxes
$discounted_subtotal_incl_taxes = $total_excl_tax - $discount_excl_tax;
$applied_coupons = WC()->cart->get_applied_coupons();
if( sizeof($applied_coupons) > 0 && $discounted_subtotal_incl_taxes < $min_total ) {
foreach ( $rates as $rate_key => $rate ){
// Targeting "Free shipping"
if( 'free_shipping' === $rate->method_id ){
unset($rates[$rate_key]);
}
}
}
return $rates;
}
答案 0 :(得分:3)
以下代码仅在购物车小计达到最小金额(已扣减含税) 时,才能为应用的优惠券启用“免费送货”功能:
add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping', 10, 2 );
function coupons_removes_free_shipping( $rates, $package ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return $rates;
$min_subtotal = 250; // Minimal subtotal allowing free shipping
// Get needed cart subtotals
$subtotal_excl_tax = WC()->cart->get_subtotal();
$subtotal_incl_tax = $subtotal_excl_tax + WC()->cart->get_subtotal_tax();
$discount_excl_tax = WC()->cart->get_discount_total();
$discount_incl_tax = $discount_total + WC()->cart->get_discount_tax();
// Calculating the discounted subtotal including taxes
$discounted_subtotal_incl_taxes = $subtotal_incl_tax - $discount_incl_tax;
$applied_coupons = WC()->cart->get_applied_coupons();
if( sizeof($applied_coupons) > 0 && $discounted_subtotal_incl_taxes < $min_subtotal ){
foreach ( $rates as $rate_key => $rate ){
// Targeting "Free shipping"
if( 'free_shipping' === $rate->method_id ){
unset($rates[$rate_key]);
}
}
}
return $rates;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。
原始答案:
当应用任何优惠券而无需任何设置时,以下代码将删除“免运费”送货方式。您的实际代码中有一些错误。请尝试以下操作:
add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping', 10, 2 );
function coupons_removes_free_shipping( $rates, $package ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return $rates;
$applied_coupons = WC()->cart->get_applied_coupons();
if( sizeof($applied_coupons) > 0 ){
// Loop through shipping rates
foreach ( $rates as $rate_key => $rate ){
// Targeting "Free shipping" only
if( 'free_shipping' === $rate->method_id ){
unset($rates[$rate_key]); // Removing current method
}
}
}
return $rates;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。
答案 1 :(得分:0)
默认情况下,如果在购物车中填写了优惠券代码并处于活动状态,WooCommerce仍将允许选择免费送货方式。可以将以下代码添加到您孩子的functions.php页面中,以在使用优惠券代码时钩住并隐藏任何免费送货选项。
add_filter( 'woocommerce_shipping_packages', function( $packages ) {
$applied_coupons = WC()->session->get( 'applied_coupons', array() );
if ( ! empty( $applied_coupons ) ) {
$free_shipping_id = 'free_shipping:2';
unset($packages[0]['rates'][ $free_shipping_id ]);
}
return $packages;
} );
只需将上面代码中的$ free_shipping_id更改为免费送货选项的ID。您可以转到WooCommerce>设置>运送选项,然后单击免费运送选项,找到您的ID。帖子ID将在显示“免费送货”详细信息/设置的页面的URL中。
i.e www.yourdomain.com/wp-admin/post.php?post=40107&action=edit
在此示例中,其中40107是装运ID。您的送货编号将不同。