WooCommerce ограничить элементы корзины по категориям продуктов - PullRequest
0 голосов
/ 23 января 2020

Я добавляю код, чтобы ограничить добавление в корзину исключительной категории товаров с другими продуктами (за исключением другой категории), но по какой-то причине мой код работает только один раз и не будет работать после того, как я ничего не изменю , Меня это не озадачивает.

Я использую WordPress 5.3.2 и WooCommerce 3.6.5.

Код основан на этой теме с похожим сценарием для ограничения товаров в корзине.

Пожалуйста, смотрите мой код ниже:

add_filter('woocommerce_add_to_cart_validation', 'check_breakfast_items', 10, 3);
function check_breakfast_items( $true, $product_id, $quantity ) {
    // Set warning notice
    $notice = __( 'Breakfast and non-breakfast items cannot be ordered at the same time.', 'woocommerce' );

    $category = 'breakfast';        // Set exclusive category
    $exempt_category = 'extras';    // Set exempted category not to be restricted
    $true = true;                   // Initializing
    $breakfast_product = false;
    $breakfast_in_cart = false;
    $extras_product = false;
    $extras_in_cart = false;

    // Check if cart has items
    if (!WC()->cart->is_empty() ) {
        $terms_slugs = wp_get_post_terms( $product_id, 'product_cat', array('fields' => 'slugs') );
        // Check if the product has breakfast category
        if ( in_array( $category, $terms_slugs ) ) {
            $breakfast_product = true;
        } else {
            $breakfast_product = false;
        }
        // Check if the product has extras category
        if ( in_array( $exempt_category, $terms_slugs ) ) {
            $extras_product = true;
        } else {
            $extras_product = false;
        }

        // Check each cart item
        foreach( WC()->cart->get_cart() as $cart_item ) {
            $cart_item_id = $cart_item['product_id'];
            $cart_terms_slugs = wp_get_post_terms( $cart_item_id, 'product_cat', array('fields' => 'slugs') );
            // Check if any cart items have breakfast category
            if ( in_array( $category, $cart_terms_slugs ) ) {
                $breakfast_in_cart = true;
            } else {
                $breakfast_in_cart = false;
            }
            // Check if any cart items have extras category
            if ( in_array( $exempt_category, $cart_terms_slugs ) ) {
                $extras_in_cart = true;
            } else {
                $extras_in_cart = false;
            }
        }

        // Check cart items for restriction
        if ( $breakfast_product == $breakfast_in_cart ){
            $true = true; // Restriction passed if product and cart items are all breakfast
        } else if ( $breakfast_product == $extras_in_cart || $extras_product == $breakfast_in_cart ) {
            $true = true; // Restriction passed if product and/or cart items are breakfast and extras
        } else if ( $breakfast_product != $breakfast_in_cart ) {
            $true = false; // Restriction not passed if product and cart items are breakfast and non-breakfast
            wc_add_notice( $message, 'error' );
        }
    }
    return $true;
}

Оригинальный код использовал has_term для поиска слагов в категориях товаров, но по какой-то причине это не сработало для меня ( Похоже, он не может поднять продукт с несколькими категориями?)

Не могу понять, почему код перестал работать без каких-либо изменений. Если кто-то может пролить свет на это, было бы здорово. Спасибо!

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