php - 根据购物篮中的产品隐藏优惠券
问题描述
我正在尝试开发一小段代码,该代码基于 WooCommerce 订阅和 WooCommerce 订阅的所有产品插件,根据客户是选择订阅还是一次性购买,在结帐时隐藏/显示优惠券选项。
通过在线阅读,我设法创建了隐藏所有结帐用户的优惠券框的代码,但它缺乏检查购物篮是否为订阅的功能。
这是到目前为止的代码:
function hide_coupon_field( $enabled ) {
if ( is_checkout() ) {
$enabled = false;
}
return $enabled;
}
add_filter( 'woocommerce_coupons_enabled', 'hide_coupon_field' );
WooCommerce 订阅的所有产品的文档似乎不是很深入,因此我不确定有哪些功能(如果有)可用于检查购物篮类型。
谢谢
解决方案
这应该可以解决问题。它的作用是遍历购物车中的所有产品,检查它们是否有一个特定字段(由 WooCommerce 订阅的所有产品插件使用)指示当前产品是订阅产品,然后禁用优惠券字段。
如果任何产品是订阅产品,它会禁用优惠券字段。
function hide_coupon_field( $enabled ){
$cart_contents = WC()->cart->cart_contents;
foreach ( $cart_contents as $cart_item ) {
if ( ! empty( $cart_item[ 'wcsatt_data'][ 'active_subscription_scheme' ] ) ) {
// cart contains a subscription product
$enabled = false;
break;
}
}
// else keeps the field enabled
return $enabled;
}
add_filter( 'woocommerce_coupons_enabled', 'hide_coupon_field' );
推荐阅读
- bots - Botpress:自定义内容类型和自定义渲染
- javascript - 变量不改变外部函数
- angular - 等到 Angular Observable 是“完成”
- c# - 使用 C# 驱动程序的 MongoDB 更新数组
- ruby-on-rails - Ruby on Rails 5 - 检查资源是否已存在时出错 - 无论是否存在
- android - 如何防止在购物车中添加多个餐厅食品
- sql - 我可以将备份文件从 SQL Server 2008 恢复到 SQL Server Express 版本吗?
- javascript - 无法对数组进行排序
- bash - 如果函数内部的条件失败,则跳过 bash while 循环
- .net - 如何练习大型 SQL Server 索引或分区问题进行面试?