i'm trying to set a minimum order quantity for a specific category in my woocommerce store. I've written a piece of code but it seems like the minimum quantity in the cart applies to ALL categories and not only to the one i've set up ("nettoyage") ... What did i do wrong ?
Here's my code (from myfunctions.php
) :
add_filter('woocommerce_quantity_input_args', 'bloomer_woocommerce_quantity_changes', 10, 2);
function bloomer_woocommerce_quantity_changes($args, $product)
{
if (!is_cart()) {
if (is_singular('product') && (has_term('nettoyage', 'product_cat'))) {
$args['input_value'] = 3; // Start from this value (default = 1)
$args['max_value'] = 10; // Max quantity (default = -1)
$args['min_value'] = 3; // Min quantity (default = 0)
$args['step'] = 1; // Increment/decrement by this value (default = 1)
}
}
return $args;
}
function sww_check_category_for_minimum()
{
// set the minimum quantity in the category to purchase
$min_quantity = 3;
// set the id of the category for which we're requiring a minimum quantity
$category_id = 40;
// get the product category
$product_cat = get_term($category_id, 'product_cat');
$category_name = '<a href="' . get_term_link($category_id, 'product_cat') . '">' . $product_cat->name . '</a>';
// get the quantity category in the cart
$category_quantity = sww_get_category_quantity_in_cart($category_id);
if ($category_quantity < $min_quantity) {
// render a notice to explain the minimum
wc_add_notice(sprintf('You must order at least 3 products from the %2$s category to be able to order!', $min_quantity, $category_name), 'error');
}
}
add_action('woocommerce_check_cart_items', 'sww_check_category_for_minimum');
//Returns the quantity of products from a given category in the WC cart
function sww_get_category_quantity_in_cart($category_id)
{
// get the quantities of cart items to check against
$quantities = WC()->cart->get_cart_item_quantities();
// start a counter for the quantity of items from this category
$category_quantity = 0;
// loop through cart items to check the product categories
foreach ($quantities as $product_id => $quantity) {
$product_categories = get_the_terms($product_id, 'product_cat');
// check the categories for our desired one
foreach ($product_categories as $category) {
// if we find it, add the line item quantity to the category total
if ($category_id === $category->term_id) {
$category_quantity += $quantity;
}
}
}
return $category_quantity;
}
Try the following instead (that will not requires any check):
// General quantity settings
add_filter( 'woocommerce_quantity_input_args', 'custom_quantity_input_args', 10, 2 );
function custom_quantity_input_args( $args, $product ){
if ( has_term( array('nettoyage'), 'product_cat', $product->get_id() ) ) {
if( ! is_cart() ) {
$args['input_value'] = 3; // Starting value
}
$args['min_value'] = 3; // Minimum value
$args['max_value'] = 10; // Maximum value
}
return $args;
}
// For Ajax add to cart button (define the min value)
add_filter( 'woocommerce_loop_add_to_cart_args', 'custom_loop_add_to_cart_quantity_arg', 10, 2 );
function custom_loop_add_to_cart_quantity_arg( $args, $product ) {
if ( has_term( array('nettoyage'), 'product_cat', $product->get_id() ) ) {
$args['quantity'] = 3; // Min value
}
return $args;
}
// For product variations (define the min value)
add_filter( 'woocommerce_available_variation', 'custom_available_variation_min_qty', 10, 3);
function custom_available_variation_min_qty( $data, $product, $variation ) {
if ( has_term( array('nettoyage'), 'product_cat', $product->get_id() ) ) {
$args['min_qty'] = 3; // Min value
}
return $data;
}
Code goes in functions.php file of the active child theme (or active theme). Tested and works
Note: The category "nettoyage" need to be set up for each desired product. If not it will not work.
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Find the answer in similar questions on our website.
Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.
PHP (from the English Hypertext Preprocessor - hypertext preprocessor) is a scripting programming language for developing web applications. Supported by most hosting providers, it is one of the most popular tools for creating dynamic websites.
The PHP scripting language has gained wide popularity due to its processing speed, simplicity, cross-platform, functionality and distribution of source codes under its own license.
https://www.php.net/
Welcome to the Q&A site for web developers. Here you can ask a question about the problem you are facing and get answers from other experts. We have created a user-friendly interface so that you can quickly and free of charge ask a question about a web programming problem. We also invite other experts to join our community and help other members who ask questions. In addition, you can use our search for questions with a solution.
Ask about the real problem you are facing. Describe in detail what you are doing and what you want to achieve.
Our goal is to create a strong community in which everyone will support each other. If you find a question and know the answer to it, help others with your knowledge.