php - 购物车内只有虚拟商品不收取手续费
问题描述
对于 WooCommerce 网站,我试图弄清楚如果购物车中只有虚拟产品,如何停止添加手续费。他们卖的是虚拟礼券和实物商品,所以如果购物车中有实物商品带有虚拟礼券产品,他们仍然需要收费处理。但是,例如,如果客户的购物车中只有一张虚拟礼券,他们就不会被收取手续费。
就添加处理的操作而言,这是我在他们的functions.php 中的内容。我只是不知道该放什么来测试购物车中的虚拟产品。
/* Add handling fee of $3 to cart at checkout */
add_action( 'woocommerce_cart_calculate_fees','handling_fee' );
function handling_fee() {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$fee = 3.00;
$woocommerce->cart->add_fee( 'Handling', $fee, false, 'standard' );
}
解决方案
我想到了。这是有效的代码。
/* Add handling fee of $3 to cart at checkout */
add_action( 'woocommerce_cart_calculate_fees','handling_fee' );
function handling_fee() {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// First test if all products are virtual. Only add fee if at least one product is physical.
$allproductsvirtual = true;
$fee = 0;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values) {
$product = $values['data'];
if( !$product->is_virtual() ){
$allproductsvirtual = false;
}
}
if ( !$allproductsvirtual ) {
$fee = 3.00;
}
$woocommerce->cart->add_fee( 'Handling', $fee, false, 'standard' );
}
推荐阅读
- r - 给定一个字符串/文件名在 R 中产生一个哈希?
- java - Java:在char数组中计数'a',计数器错误值
- gentoo - xdg-settings 未在 gentoo 中设置 default-web-browser
- python - 您可以像在 matplotlib 中那样为颜色条分配一个变量,为 plotly python 添加一个颜色条吗?
- eclipse - NoClassDefFoundError:org/eclipse/search/ui/text/TextSearchQueryProvider
- hadoop - Sqoop 根据列值导入 as-parquetfile
- asp.net - 在一台机器上使用多个用户使用 Visual Studio 进行开发时管理 localhost 端口
- javascript - 无法读取 null 的属性“getAttribute”:Angular 和 d3.select
- javascript - HTML 表单货币字段 - 将货币自动格式化为 2 位小数和最大长度
- google-sheets - 在 HLOOKUP 中锁定 row_index