Ограничьте заказы одним продуктом в WooCommerce, разрешая различные варианты переменных продуктов - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь ограничить покупателей покупкой одного товара с помощью woocommerce.Я использую этот код:

add_filter( 'woocommerce_add_cart_item_data', 'woo_custom_add_to_cart' );
function woo_custom_add_to_cart( $cart_item_data ) {
    global $woocommerce;
    $woocommerce->cart->empty_cart();

    return $cart_item_data;
}

Проблема заключается в том, что я не могу использовать два варианта в одном и том же переменном продукте.Мне нужно что-то, чтобы ограничить один продукт на заказ, но я могу позволить клиенту и несколько вариантов одного и того же переменного продукта.

Пример: Клиент покупает смартфон Samsung J7 в цвете Черный и одновременно Samsung J7 в цвете синий.Теперь, если клиент хочет дополнительно добавить смартфон Sony Xperia, он должен сделать для него еще один заказ.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 04 апреля 2019

Следующее будет ограничивать добавление в корзину, чтобы разрешить только элемент из того же продукта (поэтому для переменных продуктов это позволит добавлять в корзину различные варианты одного и того же переменного продукта) :

add_filter( 'woocommerce_add_to_cart_validation', 'filter_add_to_cart_validation', 10, 4 );
function filter_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id = 0 ) {
    if( WC()->cart->is_empty() )
        return $passed;

    $product = wc_get_product($product_id);
    $items_in_cart = [];

    if ( $product && 'variable' !== $product->get_type() ) {
        $passed = false;
    } elseif ( $product && 'variable' === $product->get_type() ) {
        $items_in_cart[$product_id] = $product_id;

        // Loop through cart items
        foreach( WC()->cart->get_cart() as $cart_item ){
            $items_in_cart[$cart_item['product_id']] = $cart_item['product_id'];
        }
        if( count($items_in_cart) > 1 )
            $passed = false;
    }

    // Avoid add to cart and display an error notice
    if( ! $passed )
        wc_add_notice( __("Different items are not allowed on an order.", "woocommerce" ), 'error' );

    return $passed;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Проверено и работает.

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