使用商业 WooCommerce 动态定价 插件,需要修改其应用折扣的方式。这与 从 Woocommerce 中的自定义动态定价中排除产品类别 答案代码有些相关。
这是我希望发生的事情的一个例子。 具有提供 5% 折扣的角色的客户正在购买基于品牌的折扣为 10% 的商品。我希望 10% 的品牌折扣覆盖角色折扣,以便仅应用 10% 的折扣。
我还应该提到,我使用以下代码来排除促销价商品的进一步折扣,以防对此产生任何影响。
add_filter( 'woocommerce_dynamic_pricing_process_product_discounts', 'wc_dynamic_pricing_is_product_eligible', 10, 4 );
function wc_dynamic_pricing_is_product_eligible( $eligible, $product, $discounter_name, $discounter_object ) {
remove_action( 'woocommerce_product_is_on_sale', array(
WC_Dynamic_Pricing::instance(),
'on_get_product_is_on_sale'
), 10, 2 );
remove_filter( 'woocommerce_dynamic_pricing_process_product_discounts', 'wc_dynamic_pricing_is_product_eligible', 10, 4 );
if ( $product->is_on_sale() ) {
$eligible = false;
}
add_filter( 'woocommerce_dynamic_pricing_process_product_discounts', 'wc_dynamic_pricing_is_product_eligible', 10, 4 );
add_action( 'woocommerce_product_is_on_sale', array(
WC_Dynamic_Pricing::instance(),
'on_get_product_is_on_sale'
), 10, 2 );
return $eligible;
}
目前,我还无法使用标准插件选项来做到这一点。
我希望我对一切都清楚。
您似乎想修改 WooCommerce 中应用折扣的方式,特别是使用 WooCommerce 动态定价扩展。您希望基于品牌的折扣优先于基于角色的折扣,并且您还希望从进一步的折扣中排除特价商品。以下是解决此问题的方法:
修改基于角色的折扣: 由于您已经在使用基于角色的折扣的自定义函数,因此如果存在基于品牌的折扣,请确保基于角色的折扣函数不会修改价格。在应用基于角色的折扣之前,您可以添加检查以查看该产品是否可以使用基于品牌的折扣。
修改基于品牌的折扣: 如果您使用 WooCommerce 动态定价扩展设置了基于品牌的折扣,请确保基于品牌的折扣功能仅在不存在基于角色的折扣时才应用品牌折扣。这样,只有在没有角色折扣的情况下,品牌折扣才会适用。
排除特价商品: 由于您正在使用一个函数来排除促销价商品的进一步折扣,请确保在修改基于角色和基于品牌的折扣后,该函数仍然按预期工作。
以下是如何进行这些修改的高级示例:
// Modify Role-Based Discount
function add_cart_item_data_role_based( $cart_item_data, $product_id ) {
// Check if brand-based discount is not set
if ( ! has_brand_based_discount( $product_id ) ) {
// Apply role-based discount here
}
return $cart_item_data;
}
// Modify Brand-Based Discount
function add_cart_item_data_brand_based( $cart_item_data, $product_id ) {
// Check if role-based discount is not set
if ( ! has_role_based_discount( $product_id ) ) {
// Apply brand-based discount here
}
return $cart_item_data;
}
// Exclude Sale-Priced Items
function wc_dynamic_pricing_is_product_eligible( $eligible, $product, $discounter_name, $discounter_object ) {
if ( $product->is_on_sale() ) {
$eligible = false;
}
return $eligible;
}
请注意,这是一个简化的示例,您的实际实现可能涉及更复杂的逻辑。另外,我假设您有
has_role_based_discount
和 has_brand_based_discount
等函数,您可以使用它们来确定相应的折扣是否适用于给定产品。