зависимость продукта от woocommerce: варианты, которые нельзя купить в одиночку - PullRequest
0 голосов
/ 07 марта 2019

Есть ли способ установить конкретный вариант продукта, чтобы его нельзя было купить без наличия другого продукта в корзине?

Пример: У меня есть магазин с 10 продуктами, каждый с вариациями «70 г», «1 кг» и «2 кг». Теперь, если у вас есть варианты «70 г» в корзине без другого варианта с более высоким значением, должно появиться уведомление и кнопка «Оформить заказ» должна быть отключена.

Поэтому я ищу способ предотвратить покупку только вариаций "70 г", поскольку одни эти вариации не приносят прибыли.

Я нашел этот код, чтобы сделать минимальную стоимость заказа для корзины и показать уведомление, но я не знаю, как настроить это для вариантов и отключить кнопки: https://docs.woocommerce.com/document/minimum-order-amount/

1 Ответ

0 голосов
/ 08 марта 2019

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

/** Renders a notice and prevents checkout if the cart only contains products in a specific category */
function sv_wc_prevent_checkout_for_category() {
    //  If the cart is empty, then let's hit the ejector seat
    if (WC()->cart->is_empty()) {
        return;
    }   
    // set the slug of the category for which we disallow checkout
    $category = '70g';
    // 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( 'Du hast ausschließlich 70g-Probierpakete in deinem Warenkorb. Aus wirtschaftlichen Gründen können wir diese nur in Kombination mit anderen Produkten anbieten. Bitte füge daher weitere Produkte zu deiner Bestellung hinzu.', $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*/
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...