Я пытаюсь добавить скидку на обычную корзину на основе минимального количества и категорий элементов корзины.
Я беру код из этого ответа:
Скидка на корзину по счету корзины и только для предметов, которые не продаются
Я внес некоторые изменения, и это мой код:
add_action('woocommerce_cart_calculate_fees' , 'my_custom_discount', 10, 1); function my_custom_discount( $cart_object ){ if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // Only when there is 4 or more items in cart if( $cart_object->get_cart_contents_count() >= 4): // Defining variables $categories = array('mycategory1','mycategory2'); $has_category = false; // Iterating through each item in cart foreach( $cart_object->get_cart() as $cart_item ){ // Getting an instance of the product object $_product = new WC_Product( $cart_item['product_id'] ); // If a cart item has the category if(has_category($category, $_product)){ $has_category = true; break; } } ## Discount calculation ## $discount = $cart_object->subtotal * -0.03; ## Applied discount (no products on sale) ## if($has_category ) $cart_object->add_fee( '3% discount', $discount); endif; }
Я не могу заставить его работать.
Что я делаю неправильно и как заставить его работать?
благодаря
Поскольку категориями продуктов является пользовательская таксономия 'product_cat'
вам нужно будет использовать has_term()
функцию has_term()
(вместо has_category()
) следующим образом:
add_action('woocommerce_cart_calculate_fees' , 'my_custom_discount', 10, 1); function my_custom_discount( $cart_obj ){ if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // Only when there is 4 or more items in cart if ( $cart_obj->get_cart_contents_count() > 3): // Set HERE your array of categories (slugs, IDs or names) <== <== <== <== <== $categories = array('mycategory1','mycategory2'); // Initialising variable $has_category = false; // Iterating through each item in cart foreach( $cart_obj->get_cart() as $cart_item ){ // The product ID $product_id = $cart_item['product_id']; // When a cart item is from one defined product categories we set $has_category to true. if ( has_term( $categories, 'product_cat', $product_id ) ) { $has_category = true; break; } } ## Discount calculation ## $discount = $cart_obj->subtotal * -0.03; ## Applied discount (for products (items) of defined product categories) ## if( $has_category ) $cart_obj->add_fee( '3% discount', $discount); endif; }
Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.
Этот код проверен и работает для WooCommerce версии 2.6+ и 3.0+