php - 请勿对 WooCommerce 中的延期交货产品应用优惠券折扣

标签 php wordpress woocommerce product coupon

我尝试仅对有库存的产品应用优惠券。

因此,如果我的购物车中有 5 件商品,库存有 4 件商品,则只有 4 件商品会享受折扣,缺货的产品则不会。

实际上,我正在尝试更改“class-wc-discounts.php”文件中的默认“get_items_to_apply_coupon”函数。

我尝试计算 foreach cicle 内当前产品的库存数量,然后将 $item_to_apply->quantity 更改为库存产品和购物车产品之间的差异。

但如果我在 $->数量中输入“200”,折扣也不会改变

protected function get_items_to_apply_coupon( $coupon ) {
    $items_to_apply = array();

    foreach ( $this->get_items_to_validate() as $item ) {
        $item_to_apply = clone $item; // Clone the item so changes to this item do not affect the originals.

        if ( 0 === $this->get_discounted_price_in_cents( $item_to_apply ) || 0 >= $item_to_apply->quantity ) {
            continue;
        }

        if ( ! $coupon->is_valid_for_product( $item_to_apply->product, $item_to_apply->object ) && ! $coupon->is_valid_for_cart() ) {
            continue;
        }
        
            $items_to_apply[] = $item_to_apply;
        

    }



    return $items_to_apply;
}

最佳答案

class-wc-discounts.php包含

在这个函数中我们找到 woocommerce_coupon_get_discount_amount过滤钩。

因此,当产品缺货时,您可以返回 0 作为折扣

function filter_woocommerce_coupon_get_discount_amount( $discount, $price_to_discount , $cart_item, $single, $coupon ) {    
    // On backorder
    if ( $cart_item['data']->is_on_backorder() ) {
        $discount = 0;
    }

    return $discount;
}
add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_woocommerce_coupon_get_discount_amount', 10, 5 );

关于php - 请勿对 WooCommerce 中的延期交货产品应用优惠券折扣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63424177/

相关文章:

php - 基于 WooCommerce 电子邮件通知中销售的产品的不同收件人

php - 在 Woocommerce 类别存档页面上显示属性值

php - 按钮选择要使用的样式表

php - 从 echo 中得到返回

PHP MYSQL 自动换行

php - 如何使用 Codeigniter 删除 URL 中未使用的 $_GET 参数?

javascript - 在 WordPress 主页上添加地理位置

sql - 数据库 SQL 错误,应该可以工作

PHP 更新 MYSQL 表单不工作

html - 额外的 Wordpress 主题 - 特定分辨率的移动菜单