在 WooCommerce 中,我需要为产品类别的每个项目设置最小数量.我搜索了论坛,发现了一些运行良好的代码,但它只计算产品类别的总数量:
In WooCommerce, I need to set up a minimum quantity for each item of a product category. I searched the forum and found some code that works fine except it only counts the Quantity for a product category in total:
add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
function wc_minimum_order_amount() {
$minimum = 5; //Qty product
if ( WC()->cart->cart_contents_count < $minimum ) {
$draught_links = array();
foreach(WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$terms = get_the_terms( $_product->id, 'product_cat' );
foreach ($terms as $term) {
$draught_links[] = $term->name;
}
}
if (in_array("Noten", $draught_links)){
$on_draught = true;
}else{
$on_draught = false;
}
if( is_cart() ) {
if($on_draught){
wc_print_notice(
sprintf( 'Bitte beachte die Mindestbestellmenge. Du brauchst mindestens %s Notenexemplare pro Arrangement. Aktuell hast du %s Stück in deinem Warenkorb.' ,
$minimum ,
WC()->cart->cart_contents_count
), 'error'
);
}
} else {
if($on_draught){
wc_add_notice(
sprintf( 'Bitte beachte die Mindestbestellmenge. Du brauchst mindestens %s Notenexemplare pro Arrangement. Aktuell hast du %s Stück in deinem Warenkorb.' ,
$minimum ,
WC()->cart->cart_contents_count
), 'error'
);
}
}
}
}
例如,如果我有两个属于同一产品类别的产品(A 和 B)并将此类别的最小数量设置为 5,则在这种情况下不会出现客户的错误消息:
For example if I have two products (A and B) of belonging to the same product category and set up minimum quantity for this category to 5, the error message for the customer won't appear in this case:
对于该类别的每个产品,我至少需要 5 个.
I need a min quantity of 5 for every single product of that category.
您知道如何更改和优化以下代码吗?
Do you have an idea how to change and optimize the following code?
从 WooCommerce 3 开始,您的实际代码已经过时且不方便……有多种方法:
Since WooCommerce 3, your actual code is outdated and not convenient… There is multiple ways:
1).最好的方法:在产品级别设置最小数量(针对产品类别):
1). The best way: Set up the minimum quantity at product level (for a product category):
// On single product pages
add_filter( 'woocommerce_quantity_input_args', 'min_qty_filter_callback', 20, 2 );
function min_qty_filter_callback( $args, $product ) {
$categories = array('Noten'); // The targeted product category(ies)
$min_qty = 5; // The minimum product quantity
$product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
if( has_term( $categories, 'product_cat', $product_id ) ){
$args['min_value'] = $min_qty;
}
return $args;
}
// On shop and archives pages
add_filter( 'woocommerce_loop_add_to_cart_args', 'min_qty_loop_add_to_cart_args', 10, 2 );
function min_qty_loop_add_to_cart_args( $args, $product ) {
$categories = array('Noten'); // The targeted product category
$min_qty = 5; // The minimum product quantity
$product_id = $product->get_id();
if( has_term( $categories, 'product_cat', $product_id ) ){
$args['quantity'] = $min_qty;
}
return $args;
}
代码位于活动子主题(或活动主题)的 functions.php 文件中.经过测试和工作.
Code goes in functions.php file of your active child theme (or active theme). Tested and work.
2).替代方法:检查购物车商品并显示错误消息(类似于您的代码):
2). Alternative way: Checking cart items and displaying an error message (similar to your code):
add_action( 'woocommerce_check_cart_items', 'wc_min_item_required_qty' );
function wc_min_item_required_qty() {
$categories = array('Noten'); // The targeted product category
$min_item_qty = 5; // Minimum Qty required (for each item)
$display_error = false; // Initializing
// Loop through cart items
foreach(WC()->cart->get_cart() as $cart_item ) {
$item_quantity = $cart_item['quantity']; // Cart item quantity
$product_id = $cart_item['product_id']; // The product ID
// For cart items remaining to "Noten" producct category
if( has_term( $categories, 'product_cat', $product_id ) && $item_quantity < $min_item_qty ) {
wc_clear_notices(); // Clear all other notices
// Add an error notice (and avoid checkout).
wc_add_notice( sprintf( 'Bitte beachte die Mindestbestellmenge. Du brauchst mindestens %s Notenexemplare pro Arrangement. Aktuell hast du %s Stück in deinem Warenkorb.', $min_item_qty , $item_quantity ), 'error' );
break; // Stop the loop
}
}
}
代码位于活动子主题(或活动主题)的 functions.php 文件中.经过测试和工作.
Code goes in functions.php file of your active child theme (or active theme). Tested and work.
为了使其也适用于父产品类别,您还将添加此自定义功能:
To make it work for parent product category too, you will also add this custom function:
// Custom conditional function that handle parent product categories too
function has_product_categories( $categories, $product_id = 0 ) {
$parent_term_ids = $categories_ids = array(); // Initializing
$taxonomy = 'product_cat';
$product_id = $product_id == 0 ? get_the_id() : $product_id;
if( is_string( $categories ) ) {
$categories = (array) $categories; // Convert string to array
}
// Convert categories term names and slugs to categories term ids
foreach ( $categories as $category ){
$result = (array) term_exists( $category, $taxonomy );
if ( ! empty( $result ) ) {
$categories_ids[] = reset($result);
}
}
// Loop through the current product category terms to get only parent main category term
foreach( get_the_terms( $product_id, $taxonomy ) as $term ){
if( $term->parent > 0 ){
$parent_term_ids[] = $term->parent; // Set the parent product category
$parent_term_ids[] = $term->term_id; // (and the child)
} else {
$parent_term_ids[] = $term->term_id; // It is the Main category term and we set it.
}
}
return array_intersect( $categories_ids, array_unique($parent_term_ids) ) ? true : false;
}
代码位于活动子主题(或活动主题)的 functions.php 文件中.经过测试和工作.
Code goes in functions.php file of your active child theme (or active theme). Tested and work.
然后在现有代码中,您将替换:
Then in the existing code, you will replace:
has_term( $category, 'product_cat', $product_id )
由
has_product_categories( $category, $product_id )
这也将允许您处理父产品类别.
That will allow you to handle parent product categories too.
这篇关于WooCommerce 中特定产品类别的最小购物车项目数量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
以编程方式将可下载文件添加到 Woocommerce 产品Add programmatically a downloadable file to Woocommerce products(以编程方式将可下载文件添加到 Woocommerce 产品)
获取今天 Woocommerce 中每种产品的总订单数Get today#39;s total orders count for each product in Woocommerce(获取今天 Woocommerce 中每种产品的总订单数)
在 WooCommerce 和电话字段验证问题中添加自定义注Add Custom registration fields in WooCommerce and phone field validation issue(在 WooCommerce 和电话字段验证问题中添加自定义注册字段
在 Woocommerce 简单产品中添加一个将更改价格的选Add a select field that will change price in Woocommerce simple products(在 Woocommerce 简单产品中添加一个将更改价格的选择字段)
在 WooCommerce 3 中将自定义列添加到管理产品列表Add custom columns to admin products list in WooCommerce 3(在 WooCommerce 3 中将自定义列添加到管理产品列表)
自定义结帐“下订单"按钮输出htmlCustomizing checkout quot;Place Orderquot; button output html(自定义结帐“下订单按钮输出html)