php - 根据 Woocommerce 中的购物车商品运输类别计数更改运输类别
问题描述
我在使用默认的 WooCommerce 运输等级设置时遇到问题。我们有一个小型网店,运费为 2。一种用于适合邮箱的产品,另一种则不适合。
我们想做一个设置,如果有 2 个产品具有邮箱运输等级,则价格变为包裹价格。
现在默认 WooCommerce 只收取 1 倍的邮箱运费。
解决方案
首先,您需要在下面的屏幕中进行运输设置,对于“统一费率”运输方式和只有一个名为“邮箱”的运输类别(为“邮箱”或无运输类别设置所需的金额):
因此,您的某些产品将具有“邮箱”运输类别,而所有其他产品则没有运输类别。没有运输等级(No shipping class)的产品将是您的“包裹”。
如果有多个商品具有“邮箱”运输类别,则以下代码将删除购物车商品运输类别:
// Updating cart item price
add_action( 'woocommerce_before_calculate_totals', 'change_change_shipping_class', 30, 1 );
function change_change_shipping_class( $cart ) {
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// HERE define your shipping class SLUG
$mailbox_shipping_class = 'mailbox';
$mailbox_count = 0;
// 1st cart item Loop: Counting "mailbox" shipping classes cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Set the new price
if( $cart_item['data']->get_shipping_class() == $mailbox_shipping_class ) {
$mailbox_count += $cart_item['quantity'];
}
}
// If there is more than one item we continue
if( $mailbox_count <= 1 )
return; // Exit
// 2nd cart item Loop: Reset the cart items with shipping class "mailbox"
foreach ( $cart->get_cart() as $cart_item ) {
if( $cart_item['data']->get_shipping_class() == $mailbox_shipping_class ){
$cart_item['data']->set_shipping_class_id('0');
}
}
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
推荐阅读
- c++ - 如何编写 CMakeLists.txt 以使用 FreeImage 预编译库和头文件
- ios - 如何使用 kmPerHour UnitType 处理 MeasurementFormatter?
- swift - Xcode 仅将“AppIcon”作为 UIImage 中的命名变量
- javascript - 无法在javascript中将所有复选框重置为未选中
- python - 具有两个非嵌套外键的模型的 Django-rest-framework 详细视图和相应 URL
- node.js - 如何将 npm 包中的 node.js 对象存储在 mongodb 中
- css - 如何垂直居中输入/文本区域元素,其中多行文本仍然在下面换行?
- node.js - 节点正常关闭 - 销毁不活动的 keepAlive 连接但完成正在进行的请求
- go - 将接口与 nil 进行比较
- azure - 用于政府云中 Azure 存储的 TLS