簡體   English   中英

如何在WooCommerce中改變購物車內容?

[英]How to Alter Cart Contents in WooCommerce?

我試圖通過代碼從購物車中刪除特定產品。 我只看到空車選項,它清除了購物車中的所有產品,但我想在購物車頁面中清除特定產品。 例如:假設我已經添加了兩個產品到購物車,但我想購物車行為應該既不是也不意味着只有一個產品應該在購物車中。 如果產品1在購物車中,則產品2不應允許添加到購物車中。 如果產品2在購物車中,那么產品1不應該允許。

我嘗試了很少的代碼,但我找不到確切的鈎子來做這個實際的行為。 我正在嘗試的是而不是空的整個購物車,我加載購物車內容,這是使用購物車項目鍵取消特定數組的值數組,並將剩余的內容加載到購物車。 但看起來不適合我。

function cf_alter_cart_content($value) {
    global $woocommerce;
    $cart_contents = $woocommerce->cart->get_cart();
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $value) {
        if ($value['product_id'] == '77') {
            unset($cart_contents[$cart_item_key]);
            unset($value['data']);
        }
        return $value['data'];
    }
}

//add_action('wp_head', 'cf_alter_cart_content');
add_filter('woocommerce_cart_item_product', 'cf_alter_cart_content', 10, 1);

可能有任何簡單的方法來實現這一目標嗎? 不確定任何建議會很棒。

我正在使用woocommerce_before_cart過濾器進行類似設置,其中某些組中的人員不允許訂購特定產品skus。 我希望這有幫助。 您可能希望在每個產品中創建一個自定義字段,類似於逗號描述的其他skus / post_id列表,不允許與其一起訂購。

此代碼檢查用戶所關聯的第一個組(在我的站點中,他們只有1個組)。 disallowed_product_skus是不允許用戶購買該組的skus列表。

$disallowed_product_skus  =  array (
  <group_num>  =>  array (
        '<sku>',
  )
);
add_filter ( 'woocommerce_before_cart' , 'cart_check_disallowed_skus' );
function cart_check_disallowed_skus() {
        global $woocommerce;
        global $disallowed_product_skus;

        $assigned_group  =  GroupOperations::get_current_user_first_group();

        $cart_contents = $woocommerce->cart->get_cart();
        $keys = array_keys ( $cart_contents );

        if ( array_key_exists ( $assigned_group , $disallowed_product_skus ) ) {
                $disallowed_products_in_cart = false;
                foreach ( $keys as $key ) {
                        $cart_item_product_id = $cart_contents[$key]['product_id'];
                        $cart_product_meta = get_post_meta ( $cart_item_product_id );
                        $cart_product_sku = $cart_product_meta['_sku'][0];

                        if ( in_array ( $cart_product_sku , $disallowed_product_skus[$assigned_group] ) ) {
                                $woocommerce->cart->set_quantity ( $key , 0 , true );
                                $disallowed_products_in_cart = true;
                        }
                }

                if ( $disallowed_products_in_cart ) {
                        echo '<p class="woocommerce-error">Non-approved products have been automatically removed from cart.</p>';
                }
        }
}

暫無
暫無

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

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