gpt4 book ai didi

php - 根据购物车页面中的属性值和产品数量,在 WooCommerce 中添加到购物车验证

转载 作者:行者123 更新时间:2023-12-04 08:36:12 25 4
gpt4 key购买 nike

实际上,我正在尝试根据产品属性为某些产品 ID 设置添加到购物车的限制。
我所做的是:

add_action( 'woocommerce_add_to_cart_validation', 'max_add_to_cart', 10, 2 );
function max_add_to_cart( $cart_item_key, $product_id ) {

$product = wc_get_product( $product_id );
$maxqty = $product->get_attribute('quantite_max');
$nbcart = get_item_qty_cart($product_id);
if (!empty($maxqty) && $maxqty <= $nbcart) {
wc_add_notice("cant have more than " . " {$maxqty} x {$product->get_title()} in cart.", 'error');
return false;

}
return true;
}
它循环工作,但在产品页面上,它不考虑数量输入。
有没有办法在我的函数中获取数量添加输入?

最佳答案

  • woocommerce_add_to_cart_validation包含 5 个参数(最后 2 个是可选的)
  • $passed = 默认返回 true
  • $product_id = 产品 ID,这使您可以访问 wc_get_product( $product_id )获取产品对象
  • $quantity = 您要添加到购物车的当前数量

  • get_item_qty_cart您的代码中似乎不存在
  • 通过在我的答案中添加的评论标签进行解释

  • 所以你得到:
    function filter_woocommerce_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id = null, $variations = null ) {
    // Get product object
    $product = wc_get_product( $product_id );

    // Flag
    $flag = false;

    // Is a WC product
    if ( is_a( $product, 'WC_Product' ) ) {
    // Get the product attribute value
    $max_qty = $product->get_attribute( 'quantite_max' );

    // NOT empty
    if ( ! empty( $max_qty ) ) {
    // If new added quantity greater than max quantity
    if ( $quantity > $max_qty ) {
    $flag = true;
    // WC Cart NOT null & Cart is NOT empty
    } elseif ( ! is_null( WC()->cart ) && ! WC()->cart->is_empty() ) {
    // Get cart items quantities
    $cart_item_quantities = WC()->cart->get_cart_item_quantities();

    // Product quantity in cart
    $product_qty_in_cart = isset( $cart_item_quantities[ $product_id ] ) ? $cart_item_quantities[ $product_id ] : null;

    // New added quantity + product quantity in cart greater than max quantity
    if ( ( $quantity + $product_qty_in_cart ) > $max_qty ) {
    $flag = true;
    }
    }
    }
    }

    // True
    if ( $flag ) {
    wc_add_notice( sprintf( __( 'Cant have more than %s x %s in cart', 'woocommerce' ), $max_qty, $product->get_name() ), 'error' );
    $passed = false;
    }

    return $passed;
    }
    add_filter( 'woocommerce_add_to_cart_validation', 'filter_woocommerce_add_to_cart_validation', 10, 5 );

    关于php - 根据购物车页面中的属性值和产品数量,在 WooCommerce 中添加到购物车验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64789010/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com