Отключить оформление заказа, когда определенного товара нет в корзине выше определенного общего количества в корзине

#php #wordpress #woocommerce

#php #wordpress #woocommerce

Вопрос:

Я хотел бы знать, возможно ли отключить оформление заказа, когда в WooCommerce нет определенного товара в корзине выше определенного количества в корзине.

Я нашел код, который делает прямо противоположное, я думаю:

 function sv_wc_prevent_checkout_for_category() {
    
    // set the slug of the category for which we disallow checkout
    $category = 'clothing';
    
    // get the product category
    $product_cat = get_term_by( 'slug', $category, 'product_cat' );
    
    // sanity check to prevent fatals if the term doesn't exist
    if ( is_wp_error( $product_cat ) ) {
        return;
    }
    
    $category_name = '<a href="' . get_term_link( $category, 'product_cat' ) . '">' . $product_cat->name . '</a>';
    
    // check if this category is the only thing in the cart
    if ( sv_wc_is_category_alone_in_cart( $category ) ) {
        
        // render a notice to explain why checkout is blocked
        wc_add_notice( sprintf( 'Hi there! Looks like your cart only contains products from the %1$s category amp;ndash; you must purchase a product from another category to check out.', $category_name ), 'error' );
    }
}
add_action( 'woocommerce_check_cart_items', 'sv_wc_prevent_checkout_for_category' );


/**
 * Checks if a cart contains exclusively products in a given category
 * 
 * @param string $category the slug of the product category
 * @return bool - true if the cart only contains the given category
 */
function sv_wc_is_category_alone_in_cart( $category ) {
        
    // check each cart item for our category
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        
        // if a product is not in our category, bail out since we know the category is not alone
        if ( ! has_term( $category, 'product_cat', $cart_item['data']->id ) ) {
            return false;
        }
    }
        
    // if we're here, all items in the cart are in our category
    return true;
}
 

Комментарии:

1. Да, в WooCommerce можно отключить оформление заказа, когда в корзине нет определенного товара, превышающего определенное количество в корзине… Но мы ожидаем, что вы предоставите свою реальную попытку кода в своем вопросе. Пожалуйста, обратите внимание, что StackOverflow не является бесплатным сервисом кодирования.

2. @LoicTheAztec Извините, я забыл добавить его. Теперь он там.

3. Я нашел код, который делает прямо противоположное, я думаю , вы должны сначала проверить код и понять, что он делает. Люди здесь не будут смотреть на этот код и пытаться понять, что он делает вместо вас.

Ответ №1:

Как упоминалось в комментариях, нам нужно посмотреть, что вы пробовали, чтобы помочь вам. Вы заявили,

…в WooCommerce можно отключить оформление заказа, когда в корзине нет определенного товара выше определенного общего количества в корзине.

Итак, вы просматриваете массив cart_items для определенного товара и его количества в сеансе корзины:

 foreach(WC()->cart->get_cart() as $item) {
    echo $item['product_id'];
    echo $item['quantity'];
}
 

Теперь следуйте тому, что у вас есть выше, и вы должны быть в состоянии создать функцию, которая предотвращает оформление заказа, если определенный товар с определенным количеством не существует в корзине.

Комментарии:

1. Прежде всего, большое спасибо за ваш ответ. К сожалению, я очень плох в программировании, но я стараюсь изо всех сил. Я понимаю ваш первый код для просмотра массива cart_items, но как я могу объединить это с моим отправленным кодом?

2. Я бы посоветовал поискать кого-нибудь, кто справится с этим за вас. Для справки по коду существует несколько аутсорсинговых сервисов, таких как freelancer.com