Woocommerce исключает конкретную категорию корзины из минимального заказа - PullRequest
0 голосов
/ 20 ноября 2018

У меня минимальная сумма заказа 4 шт. ИЛИ 8 шт.Например, 1,2,3,5,6,7 наименований недействительны.

Я пытаюсь ИСКЛЮЧИТЬ продукты из категории: Рождество из этого правила.

например, чтобы покупатель мог купить 1 товар из рождественской категории, но он должен купить минимум 4 или 8 товаров из всех других категорий.

Нижеприведенный код работает сам по себе, чтобы проверить,товары в корзине принадлежат Рождество категория:

add_action('woocommerce_before_cart', 'bbloomer_check_category_in_cart');

function bbloomer_check_category_in_cart() {

// Set $cat_in_cart to false
$cat_in_cart = false;

// Loop through all products in the Cart        
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

    // If Cart has category "christmas", set $cat_in_cart to true
    if ( has_term( 'christmas', 'product_cat', $cart_item['product_id'] ) ) {
        $cat_in_cart = true;
        break;
    }
}

Вторая часть моего кода не работает на основе вышеуказанного условия.Однако он работает сам по себе.

        // If no christmas category in cart, run minimum order code:      
if ( !$cat_in_cart ) {


  add_action( 'woocommerce_check_cart_items', 'spyr_set_min_num_products' );
function spyr_set_min_num_products() {
    // Only run in the Cart or Checkout pages
    if( is_cart() || is_checkout() ) {
        global $woocommerce;

        // Set the minimum number of products before checking out     
        $minimum_num_products = 8;
        $minimum_taster_products = 4;

        // Get the Cart's total number of products
        $cart_num_products = WC()->cart->cart_contents_count;

        // Compare values and add an error is Cart's total number of products
        // happens to be less than the minimum required before checking out.

        // A Minimum of 4 OR 8 products is required before checking out. (Cont. below)

        if( ($cart_num_products < $minimum_num_products) && ($cart_num_products > $minimum_taster_products) ) {
            // Display our error message
            wc_add_notice( sprintf( '<strong>Our Smallest Plan requires at least %s snacks per order.</strong>' 
                . '<br />Current number of snacks: %s.',
                $minimum_num_products,
                $cart_num_products ),
            'error' );
        } else if ($cart_num_products < $minimum_taster_products) {

                    // Display our error message
            wc_add_notice( sprintf( '<strong>A Minimum of %s snacks is required for a TASTER BOX.</strong>' 
                . '<br />Current number of snacks: %s.',
                $minimum_taster_products,
                $cart_num_products ),
            'error' );

        }
    }
}


}

}

1 Ответ

0 голосов
/ 20 ноября 2018

решил сам.Вместо двух отдельных функций необходимо перейти в одну функцию и проверить категории, используя woocommerce_check_cart_items

    add_action( 'woocommerce_check_cart_items', 'spyr_set_min_num_products' );
function spyr_set_min_num_products() {

  // Set $cat_in_cart to false
$cat_in_cart = false;

// Loop through all products in the Cart        
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

    // If Cart has category "download", set $cat_in_cart to true
    if ( has_term( 'christmas', 'product_cat', $cart_item['product_id'] ) ) {
        $cat_in_cart = true;
        break;
    }
}


    // Only run in the Cart or Checkout pages
    if( is_cart() || is_checkout() ) {
        global $woocommerce;

        // Set the minimum number of products before checking out     
        $minimum_num_products = 8;
        $minimum_taster_products = 4;

        // Get the Cart's total number of products
        $cart_num_products = WC()->cart->cart_contents_count;

        // Compare values and add an error is Cart's total number of products
        // happens to be less than the minimum required before checking out.

        // A Minimum of 4 OR 8 products is required before checking out. (Cont. below)
        if( ( !$cat_in_cart ) && ($cart_num_products < $minimum_num_products) && ($cart_num_products > $minimum_taster_products) ) {
            // Display our error message
            wc_add_notice( sprintf( '<strong>Our Smallest Plan requires at least %s snacks per order.</strong>' 
                . '<br />Current number of snacks: %s.',
                $minimum_num_products,
                $cart_num_products ),
            'error' );
        } else if ( ( !$cat_in_cart ) && ($cart_num_products < $minimum_taster_products) ) {

                    // Display our error message
            wc_add_notice( sprintf( '<strong>A Minimum of %s snacks is required for a TASTER BOX.</strong>' 
                . '<br />Current number of snacks: %s.',
                $minimum_taster_products,
                $cart_num_products ),
            'error' );

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...