在Woocommerce中,我希望有一个功能可以包含在主题中,该功能可以根据价格和重量增加运费。
基于“ Shipping calculated on the items weight and cart amount” 回答线程,我尝试了类似下面的代码:
String Q="SELECT a.id_spare_part, b.kode_asset, a.kode_spare_part, a.nama_spare_part, a.tgl_beli_spare, a.vendor,b.id_asset, b.garansi, a.harga_beli, a.serial, a.stok, a.consume, sum(a.stok-a.consume) as end_balance " +
"FROM spare_part a, asset b " +
"where a.id_asset=b.id_asset " +
"group by a.id_spare_part";
编辑:
同时,我希望它立即将其显示在购物车页面上。现在它显示“输入地址以查看运送选项”。基本上,只需查看购物车的总数量,然后根据描述的重量和价格规则显示运费或免费送货即可。
答案 0 :(得分:0)
woocommerce_package_rates
是用于自定义运费的正确过滤器。
您可以通过以下方式实现。
第1步:创建两种送货方式,免费送货和固定费用,海岸为3 $
步骤2:将以下代码段复制并粘贴到functions.php
在代码段中配置统一费率并免费送货。
add_filter( 'woocommerce_package_rates', 'modify_shipping_rate', 15, 2 );
function modify_shipping_rate( $available_shipping_methods, $package ){
global $woocmmerce;
$total_weight = WC()->cart->cart_contents_weight;
$total_coast = WC()->cart->get_cart_contents_total();
if( $total_coast >= 20 ){
unset($available_shipping_methods['flat_rate:1']); //Remove flat rate for coat abobe 20$
}elseif( $total_weight > 10 ){
unset($available_shipping_methods['free_shipping:1']); // remove free shipping for below 20$
$available_shipping_methods['flat_rate:1']->cost += 2; // add 2$ if weight exceeds 10KG
}else{
unset($available_shipping_methods['free_shipping:1']); // remove free shipping for below 20$
}
return $available_shipping_methods;
}
使用以下代码段更改默认购物车消息。
add_filter( 'woocommerce_cart_no_shipping_available_html', 'change_msg_no_available_shipping_methods', 10, 1 );
add_filter( 'woocommerce_no_shipping_available_html', 'change_msg_no_available_shipping_methods', 10, 1 );
function change_msg_no_available_shipping_methods( $default_msg ) {
$custom_msg = "Enter address to view shipping options";
if( empty( $custom_msg ) ) {
return $default_msg;
}
return $custom_msg;
}
答案 1 :(得分:0)
以下代码不是基于自定义费用,而是基于运输方式的自定义。它需要为每个运输区域设置运输设置:
$3
的“固定费率” 该代码将根据权重以及税额计算来处理统一费率计算费用。
该代码将适用于任何运输区域,而无需在代码中定义运输方法ID。
代码如下:
add_filter( 'woocommerce_package_rates', 'filter_package_rates_callback', 10, 2 );
function filter_package_rates_callback( $rates, $package ) {
## -------- Settings -------- ##
$targeted_total = 20; // The targeted cart amount
$weight_threshold = 10; // The cart weight threshold
$extra_for_10kg = 2; // 10 Kg addition extra cost;
$total_weight = WC()->cart->get_cart_contents_weight();
$cart_subtotal = WC()->cart->get_subtotal(); // Excluding taxes
// Set shipping costs based on weight
foreach ( $rates as $rate_key => $rate ){
$has_taxes = false;
if( $cart_subtotal < $targeted_total || $total_weight >= $weight_threshold ){
// Remove Free shipping Method
if( 'free_shipping' === $rate->method_id ) {
unset( $rates[$rate_key] );
}
// Flat rate calculation cost when 10 kg weight is reached
if( 'flat_rate' === $rate->method_id && $total_weight >= $weight_threshold ) {
// The default rate cost (set in the shipping method)
$default_cost = $rate->cost;
// The new calculated cost (up to 10 kg)
$new_cost = $default_cost + $extra_for_10kg;
// Tax rate conversion (for tax calculations)
$tax_rate_converion = $new_cost / $default_cost;
// Set the new cost
$rates[$rate_key]->cost = $new_cost;
// TAXES RATE COST (if enabled)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $tax > 0 ){
// New tax calculated cost
$taxes[$key] = $tax * $tax_rate_converion;
$has_taxes = true;
}
}
// Set new taxes cost
if( $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
} else {
// Remove Flat Rate methods (keeping Free Shipping Method only)
if( 'flat_rate' === $rate->method_id ) {
unset( $rates[$rate_key] );
}
}
}
return $rates;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。
刷新送货缓存: (必需)
1)此代码已经保存在您的function.php文件中。
2)在运输区域设置中,禁用/保存任何运输方式,然后启用返回/保存。
您已完成,您可以对其进行测试。
直接显示运送方式 (关于您的问题编辑)
问题中提供的信息不足以了解如何进行管理。
如果您在一个国家/地区销售,并且您有一个唯一的送货地区,则可以使用以下方法强制未登录客户的国家/地区获取显示的送货方式:
add_action( 'template_redirect', 'allow_display_shipping_methods' );
function allow_display_shipping_methods() {
// HERE define the targeted country code
$country_code = 'GB';
// Set the shipping country if it doesn't exist
if( ! WC()->customer->get_shipping_country() )
WC()->customer->set_shipping_country('GB');
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。
现在这是另一个问题,在您的第一个问题中,应该作为一个新问题提出。
相关答案: