亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使特定產品在 WooCommerce 中互斥

使特定產品在 WooCommerce 中互斥

PHP
海綿寶寶撒 2023-08-06 15:53:46
情況我的網站提供兩種產品。如果用戶購買產品 A,他們就可以訪問所有電子書。如果用戶購買產品B,他們將被允許選擇一本電子書。在 WooCommerce 中,我創建了電子書作為產品 B 中的變體。產品 A ID = 477產品 B ID = 297 。雖然 297 是主要 ID,但我相信我應該使用變體 ID,例如。1483、997。我試圖解決的問題我希望這兩種產品是互斥的。畢竟,如果用戶購買了所有電子書(即產品 A)的訪問權限,那么他們就不需要購買產品 B 下的個別書籍。最終結果我嘗試了一些代碼(如下所示),但它根本不起作用。這意味著我仍然可以將產品 A 和 B 的變體添加到同一個購物車中。問題1:我該如何解決這個問題?問題 2:是否有更簡單的方法來不指定每個產品 B 變體?這是一個非常長的列表,從長遠來看不是一個可擴展的解決方案。
查看完整描述

1 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

有一種更簡單的方法可以使用“添加到購物車”驗證掛鉤:


add_filter( 'woocommerce_add_to_cart_validation', 'wc_add_to_cart_validation_filter_callback', 10, 3 );

function wc_add_to_cart_validation_filter_callback( $passed, $product_id, $quantity ) {

    if( WC()->cart->is_empty() )

        return $passed;


    $product_id1 = 37; // Single product Id

    $product_id2 = 19; // Variable product Id


    // Loop through cart items

    foreach( WC()->cart->get_cart() as $cart_item ) {

        if( ( $product_id = $product_id1 && $cart_item['product_id'] == $product_id2 )

        || ( $product_id = $product_id2 && $cart_item['product_id'] == $product_id1 ) ) {

            wc_add_notice( sprintf(

                __("This product can't not be purchased toggether with %s."),

                '"<strong>' . $cart_item['data']->get_name() . '</strong>"'

            ), 'error' );

            return false;

        }

    }


    return $passed;

}

代碼位于活動子主題(或活動主題)的functions.php 文件中。經過測試并有效。


添加 (與您的評論相關):


另一種方法是當兩種產品都在購物車中時,靜默刪除第一項:


add_action('woocommerce_before_calculate_totals', 'keep_last_variation_from_variable_products', 10, 1 );

function keep_last_variation_from_variable_products( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )

        return;


    $product_id1 = 37; // Single product Id

    $product_id2 = 19; // Variable product Id


    $product_ids = array($product_id1, $product_id2);

    $items_keys  = array();


    // Loop through cart items

    foreach (  $cart->get_cart() as $cart_item_key => $cart_item ) {

        // If cart item matches with one of our defined product

        if ( in_array( $cart_item['product_id'], $product_ids ) ) {

            // Set the cart item key in an array (avoiding duplicates)

            $items_keys[$cart_item['product_id']] = $cart_item_key;

        }

    }


    // If both products are in cart just keep the last one silently

    if( count($items_keys) > 1 ) {

        $cart->remove_cart_item( reset($items_keys) ); // remove the first one

    }

}

代碼位于活動子主題(或活動主題)的functions.php 文件中。經過測試并有效。


查看完整回答
反對 回復 2023-08-06
  • 1 回答
  • 0 關注
  • 120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號