Как установить максимальный уровень запаса для всех проданных вариантов WooCommerce без учета отдельных уровней запасов вариантов - PullRequest
0 голосов
/ 29 августа 2018

Мне интересно, сможем ли мы подключиться к WooCommerce, чтобы установить максимальное количество акций, которое можно приобрести для переменного продукта. Не обращая внимания на отдельные уровни запасов вариантов, как только эта максимальная сумма будет достигнута.

Например, у меня есть группы по продаже товаров с переменным товаром. Существует 4 варианта, в каждом из которых уровень запаса установлен на 100. Это связано с тем, что ни в одной группе не может быть более 100 человек. Однако на продажу доступно только 250 билетов (а не 400, которые мы могли бы ожидать из-за количества 4x100).

Так что это работает до 100 мест на группу семинаров. Нам просто нужно как-то ограничить общий уровень запасов всех 4 вариантов до 250.

Я надеялся включить опцию родительского продукта «Управление запасами» и установить значение 250. Но, очевидно, вариации должны переопределить это. Если мы сможем подключиться к этому и включить его снова, даже когда используется управление запасами вариаций, это может быть хорошим способом решения этой проблемы.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 31 августа 2018

Я нашел решение своей проблемы, выполнив следующее:

  1. Добавьте 2 пользовательских поля на страницу продукта WooCommerce, которые будут хранить максимальное количество всех вариантов, которые мы можем продать, а также максимальное количество отдельных вариантов. Код для этого:

    // Modify WooCommerce Product Settings add_action('woocommerce_product_options_inventory_product_data', 'wc_add_custom_field' ); function wc_add_custom_field() { $fields = array('Total quantity' => 'total_quantity','Variation quantity' => 'variation_quantity'); $field_description = array('total_quantity' ='description','variation_quantity' ='description'); $field_placeholder = array('total_quantity' =>'e.g. 300','variation_quantity' =>'e.g. 100'); foreach ($fields as $key => $value) { woocommerce_wp_text_input( array( 'id' => $value, 'label' => $key, 'description' => $field_description[$value], 'desc_tip' => 'true', 'placeholder' => $field_placeholder[$value] ) ); } }

    // Save Fields add_action( 'save_post_product', 'woo_add_custom_general_fields_save' ); function woo_add_custom_general_fields_save( $post_id ){ update_post_meta( $post_id, 'total_quantity', $_POST['total_quantity'] ); update_post_meta( $post_id, 'variation_quantity', $_POST['variation_quantity'] ); }

  2. Добавьте правила проверки корзины / корзины, чтобы клиенты не могли покупать товары, которые превышают значение настраиваемого поля «total_quantity», добавленного выше:

    add_action( "woocommerce_add_to_cart_validation","sc_woocommerce_add_to_cart_validation", 1, 5 ); function sc_woocommerce_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id, $variations ) { // Iterate through each variation and get the total stock remaining $product_variable = new WC_Product_Variable($product_id); $product_variations = $product_variable->get_available_variations(); settype($variation_stock_availability, "integer"); foreach ($product_variations as $variation) { $variation_stock_availability = +(int)$variation['max_qty']; } $count_variations = count($product_variations); $total_quantity = get_post_meta( $product_id, 'total_quantity', true ); $variation_quantity = get_post_meta( $product_id, 'variation_quantity', true );</p> <pre><code>// formula to test if any stock remaining based on sold variations $formula = $count_variations * $variation_quantity; $formula1 = (int)$formula + (int)$quantity; $formula1 = $formula1 - $variation_stock_availability; // Iterating through each cart item and use the current running quantity in the cart in the forumula foreach (WC()->cart->get_cart() as $cart_item_key=>$cart_item ){ // count(selected category) quantity $running_qty += (int) $cart_item['quantity']; $formula2 = (int)$formula + (int)$running_qty; $formula2 = $formula2 - $variation_stock_availability; // More than allowed products in the cart is not allowed if ($formula2 >= $total_places) { wc_add_notice( sprintf( __( "Unfortunately there is no availability based on your selection", "donaheys" )), 'error' ); $passed = false; return $passed; } } // More than allowed products in the cart is not allowed if ($formula1 >= $total_places) { // Add the error wc_add_notice( sprintf( __( "Unfortunately there is no availability based on your selection", "donaheys" )), 'error' ); $passed = false; return $passed; } else { $passed = true; return $passed; } $running_qty = 0;

    }

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

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