Woocommerce 免费送货最小金额与货币转换
Woocommerce Free shipping min amount with currency conversion
Woocommerce 免费送货方式不适用于多种货币。
我定义欧洲区免费送货的最小订单量 100。
主要货币设置为欧元并且它工作正常但后来我切换国家(挪威)自动应用免费送货(因为挪威货币 KR 比欧元低得多并且免费送货仅考虑最小安装数量,而不是货币),它不是基于货币应用的。转换器。
add_filter('woocommerce_package_rates', function ($methods, $rates) {
$currency = get_woocommerce_currency();
foreach ((array)$methods as &$method) {
if ($currency != 'USD' && $currency != 'GBP' && $currency != 'CHF') {
// echo "Hello";
// print_r($method->get_cost());
$method->set_cost(round(get_exchanged_currency($currency, $method->get_cost(), true, 'EUR', '', true), 2));
}
}
return $methods;
}, 10, 2);
以上代码可以很好地计算统一运费。
我想实现基于用户本地货币转换器的免费送货(IE 免费送货最低订单价值 = 100 欧元,如果用户选择挪威国家,则仅当订单价值为 1062.19 Kr 时才适用免费送货)。
如果有人能帮助我,我将不胜感激。
因为我真的不知道 get_exchanged_currency()
函数是如何工作的,所以我不确定转换量的使用,但逻辑在下面的代码中。
使用货币换算处理最低金额的免费送货
- 您首先需要为免费送货方式设置 零 的最小数量。
- 该代码将处理启用选项的应用优惠券的免费送货
- 您将在代码中设置默认货币的最小金额。
另外,要将多种货币作为 IF / ELSE 语句的条件,请改用 in_array()
。
代码:
add_filter('woocommerce_package_rates', 'filter_package_rates', 10, 2 );
function filter_package_rates( $rates, $package ) {
$currency = get_woocommerce_currency();
$free = array();
foreach ( $rates as $rate_key => $rate ) {
// For "flat_rate" (or "local_pickup") and NOT for 'USD', 'GBP', 'CHF' currencies
if ( ! in_array( $currency, array('USD', 'GBP', 'CHF') ) && 'free_shipping' !== $rate->method_id ) {
$rates[$rate_key]->cost = round( get_exchanged_currency( $currency, $rate->cost, true, 'EUR', '', true ), 2 );
}
// For "free_shipping
elseif ( 'free_shipping' === $rate->method_id ) {
$cart_total = WC()->cart->subtotal; // (or WC()->cart->get_subtotal() without taxes)
$min_amount = 100; // Free shipping min amount in EUR currency
$min_amount = round( get_exchanged_currency( $currency, $min_amount, true, 'EUR', '', true ), 2 ); // Min amount convversion
$free_shipping = new \WC_Shipping_Free_Shipping( $rate->instance_id );
$applied_coupons = WC()->cart->get_applied_coupons();
if ( 'either' === $free_shipping->requires && ! empty($applied_coupons) && $cart_total < $min_amount ) {
foreach ( $applied_coupons as $coupon_code ) {
$coupon = new WC_Coupon( $coupon_code );
if( $coupon->get_free_shipping() ) {
$coupon_free_ship = true;
break;
}
}
}
// Enable free shipping for a minimal cart amount or a coupon with free shipping option
if( $cart_total < $min_amount && ! isset($coupon_free_ship) ) {
unset($rates[$rate_key]);
} else {
$free[$rate_key] = $rate;
break;
}
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。它应该有效。
启用免费送货选项的应用优惠券:
当订单小计小于最低要求金额且应用了免费送货的优惠券时,免费送货方式被启用隐藏其他送货方式。
Refresh the shipping caches:
- This code is already saved on your functions.php file.
- In a shipping zone settings, disable / save any shipping method, then enable back / save.
You are done and you can test it.
相关:WooCommerce - Hide other shipping methods when FREE SHIPPING is available
Woocommerce 免费送货方式不适用于多种货币。 我定义欧洲区免费送货的最小订单量 100。
主要货币设置为欧元并且它工作正常但后来我切换国家(挪威)自动应用免费送货(因为挪威货币 KR 比欧元低得多并且免费送货仅考虑最小安装数量,而不是货币),它不是基于货币应用的。转换器。
add_filter('woocommerce_package_rates', function ($methods, $rates) {
$currency = get_woocommerce_currency();
foreach ((array)$methods as &$method) {
if ($currency != 'USD' && $currency != 'GBP' && $currency != 'CHF') {
// echo "Hello";
// print_r($method->get_cost());
$method->set_cost(round(get_exchanged_currency($currency, $method->get_cost(), true, 'EUR', '', true), 2));
}
}
return $methods;
}, 10, 2);
以上代码可以很好地计算统一运费。
我想实现基于用户本地货币转换器的免费送货(IE 免费送货最低订单价值 = 100 欧元,如果用户选择挪威国家,则仅当订单价值为 1062.19 Kr 时才适用免费送货)。
如果有人能帮助我,我将不胜感激。
因为我真的不知道 get_exchanged_currency()
函数是如何工作的,所以我不确定转换量的使用,但逻辑在下面的代码中。
使用货币换算处理最低金额的免费送货
- 您首先需要为免费送货方式设置 零 的最小数量。
- 该代码将处理启用选项的应用优惠券的免费送货
- 您将在代码中设置默认货币的最小金额。
另外,要将多种货币作为 IF / ELSE 语句的条件,请改用 in_array()
。
代码:
add_filter('woocommerce_package_rates', 'filter_package_rates', 10, 2 );
function filter_package_rates( $rates, $package ) {
$currency = get_woocommerce_currency();
$free = array();
foreach ( $rates as $rate_key => $rate ) {
// For "flat_rate" (or "local_pickup") and NOT for 'USD', 'GBP', 'CHF' currencies
if ( ! in_array( $currency, array('USD', 'GBP', 'CHF') ) && 'free_shipping' !== $rate->method_id ) {
$rates[$rate_key]->cost = round( get_exchanged_currency( $currency, $rate->cost, true, 'EUR', '', true ), 2 );
}
// For "free_shipping
elseif ( 'free_shipping' === $rate->method_id ) {
$cart_total = WC()->cart->subtotal; // (or WC()->cart->get_subtotal() without taxes)
$min_amount = 100; // Free shipping min amount in EUR currency
$min_amount = round( get_exchanged_currency( $currency, $min_amount, true, 'EUR', '', true ), 2 ); // Min amount convversion
$free_shipping = new \WC_Shipping_Free_Shipping( $rate->instance_id );
$applied_coupons = WC()->cart->get_applied_coupons();
if ( 'either' === $free_shipping->requires && ! empty($applied_coupons) && $cart_total < $min_amount ) {
foreach ( $applied_coupons as $coupon_code ) {
$coupon = new WC_Coupon( $coupon_code );
if( $coupon->get_free_shipping() ) {
$coupon_free_ship = true;
break;
}
}
}
// Enable free shipping for a minimal cart amount or a coupon with free shipping option
if( $cart_total < $min_amount && ! isset($coupon_free_ship) ) {
unset($rates[$rate_key]);
} else {
$free[$rate_key] = $rate;
break;
}
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。它应该有效。
启用免费送货选项的应用优惠券:
当订单小计小于最低要求金额且应用了免费送货的优惠券时,免费送货方式被启用隐藏其他送货方式。
Refresh the shipping caches:
- This code is already saved on your functions.php file.
- In a shipping zone settings, disable / save any shipping method, then enable back / save.
You are done and you can test it.
相关:WooCommerce - Hide other shipping methods when FREE SHIPPING is available