簡體   English   中英

根據 WooCommerce 中的產品屬性添加到購物車驗證

[英]Add to cart validation based on product attribute in WooCommerce

我正在嘗試在客戶將產品添加到購物車時添加過濾器,無論是否允許。

我們只需要比較 WooCommerce 產品的一個屬性。

  • 如果購物車是空的:添加到購物車確定
  • 如果購物車有 1 個或多個項目:檢查產品的屬性 XXX 值
  • 如果屬性值相同:添加到購物車 ok
  • 如果屬性值不同:添加到購物車被拒絕並顯示消息

到目前為止,我有這段代碼,但它根本無法正常工作,我不確定為什么?

// Check Products added to cart for same vendor
function so_validate_add_cart_item( $passed, $product_id ) {

  global $woocommerce;
  $items = $woocommerce->cart->get_cart();

  foreach($items as $item => $values)
        {
          $_product =  wc_get_product( $values['data']->get_id());
          $prod1_vendeur[] = $_product->get_attribute( 'pa_vendeur' );
        }

  $newproduct = wc_get_product( $product_id );
  $prod2_vendeur = $newproduct->get_attribute( 'pa_vendeur' );

  if (isset($prod1_vendeur ))
  {
    if ( $prod1_vendeur[0] != $prod2_vendeur )
      {
        $passed = false;
        wc_add_notice( 'Error message' , 'notice' );
      }
  }
  return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'so_validate_add_cart_item', 10, 5 );

任何幫助都非常感謝。

  • 當您指定woocommerce_add_to_cart_validation掛鈎包含 5 個參數時,您只傳遞了 2 個
  • global $woocommerce; 沒有必要,請改用WC()

所以你得到:

function filter_woocommerce_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id = null, $variations = null ) {   
    // Setting
    $attribute = 'pa_vendeur';
    
    // Real product ID
    $product_id = $variation_id > 0 ? $variation_id : $product_id;
    
    // Get product
    $product = wc_get_product( $product_id );
    
    // Get the product attribute value
    $product_attribute = $product->get_attribute( $attribute );
    
    // Initialize
    $flag = false;
    
    // WC Cart
    if ( WC()->cart ) {
        // Get cart
        $cart = WC()->cart;
        
        // If cart is NOT empty
        if ( ! $cart->is_empty() ) {
            // Loop through cart items
            foreach( $cart->get_cart() as $cart_item ) {
                // Get the product attribute value
                $cart_item_attribute = $cart_item['data']->get_attribute( $attribute );
                
                // NOT equal
                if ( $cart_item_attribute != $product_attribute ) {
                    // Flag becomes true
                    $flag = true;
                    
                    // Break loop
                    break;  
                }
            }
        }
    }
    
    // True
    if ( $flag ) {
        // Display an error message
        wc_add_notice( __( 'My custom error message', 'woocommerce' ), 'error' );
        
        $passed = false;
    }

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM